PHP – Как читать данные сообщения без ключа?

Этот кусок кода jQuery отправляется на одну из наших php-страниц.

var json = '{"object1":{"object2":[{"string1":val1,"string2":val2}]}}'; $.post("phppage", json, function(data) { alert(data); }); 

Внутри phppage я должен выполнить некоторую обработку в зависимости от данных сообщения. Но я не могу прочитать данные сообщения.

 foreach ($_POST as $k => $v) { echo ' Key= ' . $k . ' Value= ' . $v; } 

То, что вам нужно, должно работать нормально, но объект JSON превращается в массив массивов, когда он предоставляется данным POST. Вы получите что-то вроде этого:

 ["object1"]=> array(1) { ["object2"]=> array(1) { [0]=> array(2) { ["string1"]=> string(4) "val1" ["string2"]=> string(4) "val2" } } } } 

Таким образом, object1 – это массив, который содержит все остальные данные. Если вы это сделаете

 foreach ($_POST as $key => $val) { echo $key . " > " . $val } 

Он печатает «object1> Array». Другими словами, вам нужно также перебирать значение. Как вы это делаете, зависит от того, как структурируются данные, которые вы получаете, или знаете ли вы, как они структурированы.

используйте file_get_contents("php://input") чтобы захватить данные, полученные вашим скриптом, когда пары key=value не используются. Этот подход распространен с API-интерфейсами jsonrpc.

Шаг 1 (код Javascript):

Вместо:

 $.post("phppage", json, function(data) { alert(data); }); 

Сделай это:

 $.post("phppage", 'json':json, function(data) { alert(data); }); 

Шаг 2 (код PHP):

Изменить на:

 $json=json_decode($_POST['json']); foreach($json as $k => $v) { echo ' Key= ' . $k . ' Value= ' . $v; } 

или:

 $json=json_decode($_POST['json']); print_r($json);