Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP$\u POST为空,但HTTP\u RAW\u POST\u数据包含所有数据_Php_Json_Angularjs_Post - Fatal编程技术网

PHP$\u POST为空,但HTTP\u RAW\u POST\u数据包含所有数据

PHP$\u POST为空,但HTTP\u RAW\u POST\u数据包含所有数据,php,json,angularjs,post,Php,Json,Angularjs,Post,我只是想用JS向服务器发送一个POST请求。但是服务器有空的$\u POST数组。我可以使用HTTP\u RAW\u POST\u数据,但在PHP5.6中它将被弃用。我可以在我的$\u POST数组中发布数据吗 环境:Chrome、apache2、PHP、AngularJS(我正在使用$http.post函数) (很抱歉没有直接附加图像-我没有10个声誉)看起来像是直接发布json数据,没有任何变量 $request = file_get_contents('php://input'); pri

我只是想用JS向服务器发送一个
POST
请求。但是服务器有空的
$\u POST
数组。我可以使用
HTTP\u RAW\u POST\u数据
,但在PHP5.6中它将被弃用。我可以在我的
$\u POST
数组中发布数据吗

环境:Chrome、apache2、PHP、AngularJS(我正在使用
$http.post
函数)


(很抱歉没有直接附加图像-我没有10个声誉)

看起来像是直接发布json数据,没有任何变量

$request = file_get_contents('php://input');
print_r($request);
或者在发布数据时使用变量,如

data{'myvar': data}
print_r($_POST['myvar']);
并且会得到像这样的POST数据

data{'myvar': data}
print_r($_POST['myvar']);

$\u POST
由类型为
form urlencoded
multipart/form data
的请求填充。通常它看起来像:

foo=bar&ipsum=lorm
所以有点像一个
GET
请求

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

$request_payload = file_get_contents("php://input");
有关更多信息,请参阅。

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

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

请参阅默认情况下,jQuery使用
内容类型:x-www-form-urlencoded
和熟悉的
foo=bar&baz=moe
序列化来传输数据。然而,AngularJS使用
内容类型: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';
});

答案摘自。

尝试将标题:{'Content-Type':'application/x-www-form-urlencoded'}添加到$http.post?请参阅我的代码。我尝试了
{'Content-Type':'application/x-www-form-urlencoded'}
,但在这种情况下,我既没有
$\u POST
也没有
服务器上的HTTP\u RAW\u POST\u DATA
都不工作:1)
文件获取内容(“php://input“”
给出空字符串;2)
{'myvar':data}
与原始post数据具有相同的结果(
$\u post
为空)为什么直接发布JSON?(好奇,无意冒犯)因为对JSON数据使用表单编码是有问题的。特别是空值不会被传输<代码>{foo:[],“bar:baz”}只会导致
bar=baz
。表单编码无法指定空数组。缺少空数组似乎不是问题,因为您可以将其添加为默认值。但是,如果有:
{foo:[],[]}
表单编码给出了一个空结果。我认为这是一个问题。是的,它在工作。但我不知道,为什么在
$http.post(filtersUrl,data,{headers:{'Content-Type':'application/json;charset=utf-8'})中直接设置'Content-Type'
不起作用……我已经做了
$http.defaults.headers.post['Content-Type']='application/json;charset=utf-8'
而且它也在工作
$http.defaults.headers.post['Content-Type']='application/json;charset=utf-8'
也做同样的事情,但我认为在整个应用程序中都可以按建议提供。是的,在这种情况下,我需要做
json\u解码(file\u get\u contents('php://input'))
在我的服务器上…不过,为了像$\u POST一样使用它,我们应该将true作为第二个参数添加到json\u decode,以便它返回一个数组。$\u POST=json\u decode(file\u get\u contents('php://input’),是的),你是对的。谢谢你的评论。答案已编辑。