PHP与AngularJS客户端

时间:2015-07-04 19:07:29

标签: php json angularjs post

我试图将JSON传递给AngularJS中的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变量始终为空。但随后几乎随机,我看到了this question,答案说:

  在标题

中传递$_POST时,

Content-Type: application/json将为空

而且,虽然我的代码与问题中的代码不完全相同,但我在PHP代码上将$_POST[...]更改为$_GET[...]并且它有效! 问题是,为什么?彼此之间有什么区别?因为,从我看来,似乎没有太大的区别......

3 个答案:

答案 0 :(得分:7)

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

您要将answers作为查询参数(GET)发送至testAddObject.php而不发布(POST) - 请注意?末尾的testAddObject.php参数 -

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

答案 1 :(得分:4)

如果使用multiparturl-encoded格式之一格式化数据,则会使用来自HTTP请求正文的数据填充

$_POST

$_GET会填充来自网址query string部分的数据。

即使请求不是GET请求,也会填充

$_GET。它只关心它是否在查询字符串中。

因为它是在评论中提出来的。 $_REQUEST包含来自$_POST 的数据来自$_GET 来自$_COOKIES的数据。通常最好避免使用,因为它可能会让您对来自您不期望的地方的数据感到惊讶。

答案 2 :(得分:0)

我深入研究了这个问题,我发现this article解释说这是一个AngularJS"功能",实际上。

  

默认情况下,angular.js会在json中发送所有数据。因此,如果您对PHP代码发出POST请求,则不会填充$_POST超全局。

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

$http.post("ajax/testAddObject.php?", {answers : userAnswers}) //...

并相应地更改PHP,$_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);