views:

51

answers:

3

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) {

                    }
                  });
+3  A: 
<?php
   var_dump(json_decode(file_get_contents('php://input')));
?>
Wrikken
yes this works! the dump the request data I passed via POST
A: 

Try to decode the JSON with json_decode

$my_array = json_decode($_POST);
print_r($my_array);
Sarfraz
+1  A: 

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

Ivar Bonsaksen