PHP $ _POST为空,但HTTP_RAW_POST_DATA包含所有数据

时间:2014-11-14 10:55:12

标签: php json angularjs post

我只是想用JS向服务器发送POST请求。但是服务器有空$_POST数组。我可以使用HTTP_RAW_POST_DATA,但它将在PHP 5.6中弃用。我可以在$_POST数组中发布数据吗?

环境:Chrome,apache2,PHP,AngularJS(我正在使用$http.post功能)。

Debug image(抱歉没有直接附加图片 - 我没有10个声誉)

4 个答案:

答案 0 :(得分:10)

POST数据必须采用query stringmultipart/form-data格式才能正确解码。您的数据似乎是JSON,因此您必须自己解码:

$_POST = json_decode(file_get_contents('php://input'), true);

答案 1 :(得分:3)

$_POSTform-urlencodedmultipart/form-data类型的请求填充。通常它看起来像:

foo=bar&ipsum=lorm

有点像GET请求。

由于您直接发布了JSON(非常棒!),您可以使用:

$request_payload = file_get_contents("php://input");

有关详细信息,请参阅docs

答案 2 :(得分:3)

默认情况下,jQuery使用Content-Type: x-www-form-urlencoded和熟悉的foo=bar&baz=moe 序列化传输数据。但是,AngularJS使用Content-Type: application/json{ "foo": "bar", "baz": "moe" } JSON序列化传输数据,遗憾的是,某些Web服务器语言(特别是PHP)本身不会反序列化。

所以你可以在定义角度模块时执行此操作:

angular.module('MyModule', [], function($httpProvider) {
    // Use x-www-form-urlencoded Content-Type
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
});

来自this post by Felipe Miosso

答案 3 :(得分:0)

看起来像json数据直接发布而没有任何变量尝试使用

$request = file_get_contents('php://input');
print_r($request);

或在发布数据时使用变量,如

data{'myvar': data}

并将获得像

这样的POST数据
print_r($_POST['myvar']);