我只是想用JS向服务器发送POST
请求。但是服务器有空$_POST
数组。我可以使用HTTP_RAW_POST_DATA
,但它将在PHP 5.6中弃用。我可以在$_POST
数组中发布数据吗?
环境:Chrome,apache2,PHP,AngularJS(我正在使用$http.post
功能)。
Debug image(抱歉没有直接附加图片 - 我没有10个声誉)
答案 0 :(得分:10)
POST数据必须采用query string或multipart/form-data格式才能正确解码。您的数据似乎是JSON,因此您必须自己解码:
$_POST = json_decode(file_get_contents('php://input'), true);
答案 1 :(得分:3)
$_POST
由form-urlencoded
或multipart/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';
});
答案 3 :(得分:0)
看起来像json数据直接发布而没有任何变量尝试使用
$request = file_get_contents('php://input');
print_r($request);
或在发布数据时使用变量,如
data{'myvar': data}
并将获得像
这样的POST数据print_r($_POST['myvar']);