I am using jQuery to post a json object to my php application.
jQuery.post(\"save.php\",JSON.stringify(dataToSend), function(data){ alert(data); });
Try:
echo $value->page;
since json_decode
's default behaviour is to return an object of type stdClass
.
Alternatively, set the second optional $assoc
argument to true
:
$value = json_decode(stripslashes($_POST), true);
echo $value['page'];
You can avoid to use JSON.stringify
and json_decode
:
jQuery.post("save.php", dataToSend, function(data){ alert(data); });
And:
<?php
echo $_POST['page'];
?>
Update:
... but if your really want to use them, then:
jQuery.post("save.php", {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });
And:
<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>
If you want to use json data as an associative array, you can try as following:
<?php
$json = 'json_data'; // json data
$obj = jsondecode($json, true); // decode json as associative array
// now you can use different values as
echo $obj['json_string']; // will print page value as 'about_us.php'
for example:
$json = { "data" : [ { "contents" : "This is some content",
"selector" : "DIV.subhead"
},
{ "contents" : "some other content",
"selector" : "LI:nth-child(1) A"
}
],
"page" : "about_us.php"
}
$obj = json_decode($json, true);
/* now to print contents from data */
echo $obj['data']['contents'];
// thats all
?>
It looks like jQuery might encode a javascript object in urlencoded form then would be populated into $_POST. At least from their examples. I'd try passing in your object into post()
without stringifying it.
$_POST
will not be populated if the request body is not in the standard urlencoded form.
Instead, read from the read-only php://input stream like this to get the raw request body:
$value = json_decode(file_get_contents('php://input'));
Pass the second argument as true if you want the associative array otherwise it will keep returning object.
$value = json_decode(stripslashes($_POST),true);