PHP和x27之间的差异;s$\u POST和$\u GET与AngularJS客户端

PHP和x27之间的差异;s$\u POST和$\u GET与AngularJS客户端,php,json,angularjs,post,Php,Json,Angularjs,Post,我试图用AngularJS将JSON传递给PHP脚本,如下所示: var testObj = { answers : { aa : 2, ab : 3 } }; var userAnswers = angular.toJson(testObj.answers); $http.post("ajax/testAddObject.php?answers=" + userAnswers). success(function(data){ console.log("Re

我试图用AngularJS将JSON传递给PHP脚本,如下所示:

var testObj = {
  answers : {
    aa : 2,
    ab : 3
  }
};

var userAnswers = angular.toJson(testObj.answers);

$http.post("ajax/testAddObject.php?answers=" + userAnswers).
success(function(data){
    console.log("Result: ", data);
});
在PHP方面,我做了以下工作:

//... new PDO connection to DB
$answers = $_POST['answers'];

//some more stuff
$answers
变量始终为空。但后来,我几乎是随机地看到,答案是:

当在标题中传递
内容类型:application/json
时,
$\u POST
将为空

而且,虽然我的代码与问题中的代码不完全相同,但我将PHP代码上的
$\u POST[…]
更改为
$\u GET[…]
,并且它工作了问题是,为什么?彼此之间有什么区别?因为,从我所看到的,似乎没有什么大的区别…

$http.post(“ajax/testAddObject.php?answers=“+userAnswers)。

在这里,您将
答案作为查询参数(GET)发送到
testAddObject.php
而不是发布它们(POST)-注意
testAddObject.php
末尾的
参数-


$\u GET数据作为URL中的参数传递$_POST不是。

$\u如果使用或格式之一格式化数据,则POST将使用HTTP请求正文中的数据填充

$\u GET
由URL部分的数据填充

即使请求不是GET请求,也将填充
$\u GET
。它只关心它是否在查询字符串中



因为它是在评论中提出来的
$\u请求
包含来自
$\u POST
的数据和
$\u GET
的数据和
$\u COOKIES
的数据。一般来说,最好避免使用它,因为它可能会让你对来自你不期望的地方的数据感到惊讶。

我深入研究了这个问题,我发现这解释了这实际上是一种AngularJS“特性”

默认情况下,angular.js以json格式发送所有数据。因此,如果对PHP代码执行
POST
请求,则不会填充
$\u POST
超全局

虽然我的代码不完全正确,但如果我将客户端更改为:

$http.post("ajax/testAddObject.php?", {answers : userAnswers}) //...
并相应地更改PHP,
$\u POST[…]
仍然不返回任何内容,这在现在是有意义的

根据同一篇文章,有两种解决方案,一种在客户端,另一种在服务器端

在服务器上,您可以解析输入,然后从json解码数据:

$data = file_get_contents("php://input");
$postData = json_decode($data);`
在客户端,可以按照PHP期望的方式发送数据:

$http({
    url:url
    data : $.param(data),
    method : 'POST',
    headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'}
}).success(callback);

将提供一些见解,同时这也是阅读GET/POST工作原理的有用链接:非常感谢@Martin!已经看过了“$\u GET将被填充,即使请求不是GET请求”你想说
$\u request
否?@zeflex-否。我的意思是
$\u GET
$\u REQUEST
不同。他甚至没有真正使用post请求,它只是在查询字符串中用一个参数点击url,所以可以使用gett。这就是为什么他使用$\u post什么也得不到,因为参数不是
post
,而是添加到url中。你知道,我也知道。是的,我现在也明白了。我对这个特殊的话题有点不知所措。。那么,让我问你:如果我做了
$http.post(“ajax/testAddObject.php”,{answers:userAnswers})
那么
$\u post['answers']
就行了吗?我从来没有使用过angular js,但与angular js文档相关,你的代码应该行得通。