jQuery ajax帖子:PHP得到的内容没有

时间:2014-02-14 12:36:23

标签: javascript php jquery ajax curl

我犹豫不决,但到目前为止我还没有找到任何解决方案。我一直以为,这可能只是一个愚蠢的错误,但我找不到它。

我的PHP服务器有一个jQuery 2.1 ajax POST:

$.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在控制台中告诉我,请求数据是正确的并已发送。当试图在PHP中访问foo时,一切都是空的:

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

当我尝试使用curl进行POST时,我会在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"}"

我找不到原因。也许我的PHP配置有问题,但我已经在always_populate_raw_post_data = On中设置了php.ini

我也试过没有contentTypedataType,效果相同。

1 个答案:

答案 0 :(得分:1)

您正在发送字符串而非JSON,请按以下方式修复:

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

print_r($_POST)返回了这个:

Array
(
    [foo] => bar
)