Parse PHP array of objects with jQuery Ajax
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
FroboZ
Updated on June 17, 2022Comments
-
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 over 10 yearsSorry 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 over 10 yearsPlease post your output response.
-
FroboZ over 10 yearsconsole.log(response): ["test", $family: function, $constructor: function, each: function, clone: function, clean: function…] console.log(response[0].example): "undefined"
-
Krish R over 10 yearswhere is example object in your response?
-
FroboZ over 10 years"test" is the variable stored in example property of the mydata object?
-
FroboZ over 10 yearsvar parsed_reply = JSON.parse(response); console.log(parsed_reply.example); throws: Uncaught TypeError: Illegal invocation
-
superphonic over 10 yearsSorry 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 over 10 yearsNo you can't. 'test' is the value not the key.
result[0]
will returntest