Reputation: 67
Please help me to understand what's wrong. I want to parse JSON reply as object.
PHP process.php code:
<?php
$return = array();
array_push($return['amount']="$amount");
array_push($return['fee']="$fee");
array_push($return['total']="$total");
echo json_encode($return);
?>
Returns JSON string:
{"amount":"350","fee":"0","total":"350"}
JS (jquery) code:
$.getJSON("process.php?amount="+amount, function(data,status) {
var obj = $.parseJSON(data);
alert (obj.amount);
});
I receive error:
SyntaxError: JSON Parse error: Unexpected identifier "object"
BUT! When I try to insert result instead data (but insert ' quotes left/right):
var obj = $.parseJSON('{"amount":"350","fee":"0","total":"350"}');
And I see alert = 350. So, it's working good.
I try to make something like that:
var jsonreply = "'"+data+"'";
var obj = $.parseJSON(jsonreply);
But received below error:
SyntaxError: JSON Parse error: Single quotes (') are not allowed in JSON
Upvotes: 6
Views: 17770
Reputation: 11717
Actually u dont need to parse it. U can directly access it
$.getJSON("process.php?amount="+amount, function(data,status) {
alert (data.amount);
});
Upvotes: 1
Reputation: 129001
getJSON
parses the JSON for you — calling $.parseJSON
will convert the object into the string [object Object]
and then try to parse that, giving you an error. Just omit the $.parseJSON
call and use data
directly.
Furthermore, I should note that the calls to array_push
are strange and unnecessary. array_push
usually takes an array and a value to push on to it, but (for example) in your first line you're setting $return['amount']
to "$amount"
and then passing $return['amount']
to array_push
, which does nothing at best and might give you a warning or error at worst. You'd get the exact same behavior if you did this:
$return['amount']="$amount";
$return['fee']="$fee";
$return['total']="$total";
Then you might also realize that the quotes around, say, "$amount"
are unnecessary, and you could actually do this:
$return['amount']=$amount;
$return['fee']=$fee;
$return['total']=$total;
Finally, you can actually condense all five lines using some special array
syntax very easily:
echo json_encode(array(
'amount' => $amount,
'fee' => $fee,
'total' => $total
));
This is quite a bit nicer if I do say so myself.
Upvotes: 7
Reputation: 51
It seems like your error is here:
var jsonreply = "'"+data+"'";
Try to escape those ' with "\". Like
var jsonreply = "\'"+data+"\'";
Upvotes: 0