简体   繁体   中英

jQuery ajax post: PHP get's no content

I'm hesitating to ask, but I haven't found any solution so far. I always thought, it could just be a silly mistake, but I can't find it.

I have a jQuery 2.1 ajax POST to my PHP server:

$.ajax({
  url: "http://my-server.com/post-example.php",
  type: 'POST',
  contentType: 'application/json; charset=utf-8',
  dataType: 'json',
  data: JSON.stringify({ foo: "bar" }),
  success: function(data) {
    console.log("SUCCESS");
  },
});

Safari tells me in the console, that the request data is correct and was sent. When trying to access foo inside PHP, everything is empty:

var_dump($_POST); // array(0)
$foo = file_get_contents("php://input");
var_dump($foo); // string(0)

When I try to POST with curl, I get results in php://input :

curl -v -X POST -H "Content-Type: application/json" -d '{"foot":"bar"}' http://www.my-server.de/post-example.php

// on PHP side
var_dump($_POST); // array(0)
$foo = file_get_contents("php://input");
var_dump($foo); // string(13) "{"foo":"bar"}"

I can't find a reason why. Maybe there is something wrong in my PHP configuration, but I already set the always_populate_raw_post_data = On in my php.ini .

I also tried without contentType and dataType , same effect.

You are sending string and not JSON, fix it like this:

 $.ajax({
     url: "res.php",
     type: "POST",
     data: { foo: "bar" },
     success: function(result) {
        console.log(result);
     }
 });

print_r($_POST) returned this:

Array
(
    [foo] => bar
)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM