handle json request in PHP
When making an ajax call, when contentType is set to application/json instead of the default x-www-form-urlencoded, server side (in PHP) can't get the post parameters.
in the following working example, if I set the contentType to "application/json" in the ajax request, PHP $_POST would be empty. why does this happen? How can I handle a request where contentType is application/json properly in 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) {}
});
Solution 1:
<?php
var_dump(json_decode(file_get_contents('php://input')));
?>
Solution 2:
You will find unrecognised MIME types in $HTTP_RAW_POST_DATA
. You can also force PHP to always populate this array (not only for unrecognised MIME types) by setting the php.ini directive always_populate_raw_post_data
to true.
Raw post data will otherwise be available through the input wrapper php://input
For more information:
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