Чтение ассоциативного массива из json в $ _POST

Я использую 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 ?>