为什么ajax请求的数据使用angularjs为空?

时间:2013-03-02 04:11:21

标签: php json

我正在测试angularjs的简单ajax请求,但它似乎无法正常工作。请求已经完成,我得到200,但数据没有通过。

$http({
        url: "myphp.php",
        method: "GET",
        dataType: "json",
        data: {"foo":"bar"}
    }).success(function(data, status, headers, config) {
        console.log(data);
    }).error(function(data, status, headers, config) {
        $scope.status = status;
});

<?php

echo var_dump($_GET);

?>

与get和post相同的结果。如果我试图访问$ _GET ['foo'],我会得到一个未定义的索引异常。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

问题是您的数据是以JSON编码的正文({dataType: "json", data: {"foo": "bar"}})发送到您的PHP的。不是GET / POST参数。

当您在正文中传递数据并且您的PHP尝试在$ _GET中检索时,您将获得undefined index

不确定PHP中的正确方法,但它应该是这样的:

$requestBody = file_get_contents('php://input');
$requestBody = json_decode($requestBody);

答案 1 :(得分:0)

因为PHP不接受JSON 'application/json',所以您需要适当地从角度更新标题和参数。

首先,参数化您的数据:

data: $.param({ "foo": $scope.fooValue })

然后,将以下内容添加到$http

 headers: {
     'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8'
 }, 

如果您的所有请求都转到PHP,则可以在配置中将参数设置为全局,如下所示:

myApp.config(function($httpProvider) {
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';
});