Я использую jQuery для размещения json-объекта в моем приложении php.
jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });
Строка json, вытащенная из Firebug, выглядит так:
{ "data" : [ { "contents" : "This is some content", "selector" : "DIV.subhead" }, { "contents" : "some other content", "selector" : "LI:nth-child(1) A" } ], "page" : "about_us.php" }
В php я пытаюсь превратить это в ассоциативный массив.
Мой php-код до сих пор
<?php $value = json_decode(stripcslashes($_POST)); echo $value['page']; ?>
Ответ на вызов ajax должен быть «about_us.php», но он возвращается обратно.
Вы можете избежать использования JSON.stringify
и json_decode
:
jQuery.post("save.php", dataToSend, function(data){ alert(data); });
А также:
<?php echo $_POST['page']; ?>
Обновить:
… но если вы действительно хотите их использовать, тогда:
jQuery.post("save.php", {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });
А также:
<?php $value = json_decode($_POST['json']); echo $value->page; ?>
$_POST
не будет заполняться, если тело запроса не находится в стандартной ур-кодированной форме.
Вместо этого прочитайте из php://input
потока php://input
только для чтения, чтобы получить тело необработанного запроса:
$value = json_decode(file_get_contents('php://input'));
Передайте второй аргумент как истинный, если вы хотите, чтобы ассоциативный массив оставил возвращаемый объект.
$value = json_decode(stripslashes($_POST),true);
Пытаться:
echo $value->page;
поскольку json_decode
умолчанию заключается в возврате объекта типа stdClass
.
Альтернативно, установите второй необязательный аргумент $assoc
в значение true
:
$value = json_decode(stripslashes($_POST), true); echo $value['page'];
Похоже, что jQuery может кодировать объект javascript в urlencoded form, а затем будет заселен в $ _POST. По крайней мере, из их примеров . Я бы попытался передать ваш объект в post()
не строгая его.
Если вы хотите использовать json-данные в качестве ассоциативного массива, вы можете попробовать следующее:
<?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 ?>