在PHP中处理json请求

当进行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) {} }); 
 <?php var_dump(json_decode(file_get_contents('php://input'))); ?> 

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

否则原始的发布数据将通过input包装器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

以上在技术上是正确的,但是由于我不写太多的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); ?> 

然后你可以testing

 curl -X POST -H "Content-Type: application/json" -d '{"fieldA":"xyz","fieldN":"xyz"}' http://localhost/xxx.php 

如果你有phalcon扩展,你可以使用getJsonRawBody ()

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