2

我正在测试 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'] ,则会收到未定义的索引异常。

我究竟做错了什么?

4

2 回答 2

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);
于 2013-03-02T14:11:49.157 回答
0

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

首先,参数化您的数据:

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';
});
于 2014-05-22T19:00:48.293 回答