Parse PHP array of objects with jQuery Ajax

11,897

Solution 1

You need to JSON.parse(response); the response. You should be able to access it like you need then..

var parsed_reply = JSON.parse(response);

EDIT After actually looking at the code:

PHP

<?php

$data['example'] = "test";

echo json_encode($data);

?>

JAVASCRIPT

<script>
$.ajax({
                type: 'POST',
                url: 'example.php',
                data: {map: map},   
                cache: false,
                dataType: 'json',                 
                success: function(response) {
                  console.log(response['example']);
                }
});

</script>

OUTPUT: "test"

Solution 2

You need call testFunction() in example.php

<?php
   function testFunction() {

    $data = array()
    $mydata = new stdClass;
    $data[] = $mydata->example = 'test';

    return json_encode($data);
  }
     echo testFunction();
?>

Solution 3

function testFunction() {

$data = array();
$mydata = new stdClass;
$mydata->example = 'test';
$data[] = (array) $mydata;
return json_encode($data);
}

echo testFunction();

The response is:

[{"example":"test"}]

The key here is (array) $mydata which converts the stdclass to an array before putting it in $data

Share:
11,897
FroboZ
Author by

FroboZ

Updated on June 17, 2022

Comments

  • FroboZ
    FroboZ almost 2 years

    I'm trying to get an array of objects with data from my database into jquery to render on a website.

    ex: example.php

    <?php
    function testFunction() {
    
    $data = array()
    $mydata = new stdClass;
    $mydata->example = 'test';
    $data[] = $mydata
    return json_encode($data);
    }
    
    echo testFunction();
    ?>
    

    ex index.html

    <script>
    $.ajax({
                        type: 'POST',
                        url: 'example.php',
                        data: {map: map},   
                        cache: false,
                        dataType: 'json',                 
                        success: function(response) {
                          console.log(response[0].example);
                        }
    });
    
    </script>
    

    Output:

    console.log(response);

    ["test", $family: function, $constructor: function, each: function, clone: function, clean: function…]

    console.log(response[0].example);

    undefined

    So essentially, I receive the response fine, when I log it it gives me a structure that makes sense. however I can't seem to find the correct way of accessing my objects inside the array, the example I have above only returns undefined. What is the correct syntax for this please?

  • FroboZ
    FroboZ over 10 years
    Sorry I omitted that part as it is only an example, as I said I do get the response filled with data, I just don't know how to access it properly. I will edit my post for clarity tho.
  • Krish R
    Krish R over 10 years
    Please post your output response.
  • FroboZ
    FroboZ over 10 years
    console.log(response): ["test", $family: function, $constructor: function, each: function, clone: function, clean: function…] console.log(response[0].example): "undefined"
  • Krish R
    Krish R over 10 years
    where is example object in your response?
  • FroboZ
    FroboZ over 10 years
    "test" is the variable stored in example property of the mydata object?
  • FroboZ
    FroboZ over 10 years
    var parsed_reply = JSON.parse(response); console.log(parsed_reply.example); throws: Uncaught TypeError: Illegal invocation
  • superphonic
    superphonic over 10 years
    Sorry I brushed over your code quickly. You don't have a key called example in your response data. Your PHP function isn't returning an Indexed or Associative array, its simply returning "test". You need to json_encode a proper associative array.
  • andy
    andy over 10 years
    No you can't. 'test' is the value not the key. result[0] will return test