用PHP处理json请求

时间:2010-06-17 16:56:21

标签: php ajax json request mime-types

进行ajax调用时,当contentType设置为application / json而不是默认的x-www-form-urlencoded时,服务器端(在PHP中)无法获取post参数。
在下面的工作示例中,如果我在ajax请求中将contentType设置为“application / json”,则PHP $ _POST将为空。为什么会这样?如何在PHP中正确处理contentType为application / json的请求?

$.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 个答案:

答案 0 :(得分:25)

<?php
   var_dump(json_decode(file_get_contents('php://input')));
?>

答案 1 :(得分:2)

您会在$HTTP_RAW_POST_DATA中找到无法识别的MIME类型。您还可以通过将php.ini指令always_populate_raw_post_data设置为true来强制PHP始终填充此数组(不仅适用于无法识别的MIME类型)。

原始帖子数据将通过输入包装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

答案 2 :(得分:1)

以上技术上是正确的,但由于我没有写太多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

答案 3 :(得分:-1)

如果您有phalcon扩展程序,则可以使用getJsonRawBody ()

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