PHP和x27之间的差异;s$\u POST和$\u GET与AngularJS客户端
我试图用AngularJS将JSON传递给PHP脚本,如下所示: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
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文档相关,你的代码应该行得通。