обрабатывать JSON-запрос в PHP - PullRequest
9 голосов
/ 17 июня 2010

При выполнении вызова ajax, когда для contentType задано значение application / json вместо значения по умолчанию x-www-form-urlencoded, серверная сторона (в PHP) не может получить параметры записи.
в следующем рабочем примере, если я установлю для contentType «application / json» в запросе ajax, PHP $ _POST будет пустым. почему это происходит? Как я могу обработать запрос, когда contentType правильно является application / json в PHP?

$.ajax({
    cache: false,
    type: "POST",
    url: "xxx.php",
    //contentType: "application/json",
    processData: true,
    data: {my_params:123},
    success: function(res) {},
    complete: function(XMLHttpRequest, text_status) {}
});

Ответы [ 4 ]

25 голосов
/ 17 июня 2010
<?php
   var_dump(json_decode(file_get_contents('php://input')));
?>
2 голосов
/ 17 июня 2010

Вы найдете нераспознанные типы MIME в $HTTP_RAW_POST_DATA. Вы также можете заставить PHP всегда заполнять этот массив (не только для нераспознанных типов MIME), установив для директивы php.ini always_populate_raw_post_data значение true.

В противном случае необработанные данные будут доступны через входную оболочку php://input

Для получения дополнительной информации:

http://us.php.net/manual/en/wrappers.php.php

http://php.net/manual/en/reserved.variables.httprawpostdata.php

http://www.php.net/manual/en/ini.core.php#ini.always-populate-raw-post-data

1 голос
/ 30 декабря 2013

выше технически правильно, но поскольку я не пишу много PHP, это может быть более полезным

xxx.php будет

<?php
$file = fopen("test.txt","a");
$post_json = file_get_contents("php://input");
$post = json_decode($post_json, true);
foreach($post as $key=>$value) {
    $message = $key . ":" . $value . "\n";
    echo fwrite($file,$message);
}
fclose($file);
?>

и затем вы можете проверить с

curl -X POST -H "Content-Type: application/json" -d '{"fieldA":"xyz","fieldN":"xyz"}' http://localhost/xxx.php
0 голосов
/ 15 января 2015

Если у вас есть расширение phalcon, вы можете использовать getJsonRawBody ()

http://docs.phalconphp.com/en/latest/api/Phalcon_Http_Request.html

...