【问题标题】:angularjs ajax results parse error after successfully sending data to php成功将数据发送到php后,angularjs ajax结果解析错误
【发布时间】:2014-08-08 18:13:00
【问题描述】:

我有一个使用 jquery 来处理 ajax 的 Angular 应用程序(我在这个问题上使用 jquery 在 $http 上取得了更多进展)。我正在尝试将 json 数据发送到 php 并成功完成(php 读取它并通过标头返回数据)。我的问题是 $.ajax 无法识别成功,它失败并返回响应的解析错误。

这是我的 javascript:

    function loginUser() {
        var target = "../data/user.php";
        var data = {
            "userName": "me",
            "userPass": "pass",
            "action": "login"
        };


        $.ajax({
            url: target,
            type: "POST",
            data: JSON.stringify(data),
            contentType: 'application/json; charset=utf-8',
            dataType: "json",
            success: function(data) {
                console.log(data);
            }
        }).fail(function(jqXHR, textStatus) {
            alert( "Request failed: " + textStatus );
        });
    }

这是我的 php:

$data = file_get_contents("php://input");
$objData = json_decode($data);
print_r($objData);

这是我在 php 标头中得到的响应:

stdClass Object
(
    [userName] => me
    [userPass] => pass
    [action] => login
)

非常感谢您的帮助

【问题讨论】:

  • 你为什么用$.ajax用Angular的$httpdocs.angularjs.org/api/ng/service/$http
  • 如果你设置了正确的标题,你也不需要使用php://input。如果将标头设置为Content-Type: application/x-www.form-urlencoded,则可以在另一端使用常规的 php 变量($_GET、$_POST、$_REQUEST)。如果您要发送一个 JS 对象,只需在发送时使用 jQuery 的 param 函数 -> $.param(data)

标签: php jquery ajax json angularjs


【解决方案1】:
function loginUser($scope,$http,$log) {
    var target = "../data/user.php";
    var data = {
        "userName": "me",
        "userPass": "pass",
        "action": "login"
    };

    $http.post(target,$.param(data),{headers:{'Content-Type':'application/x-www-form-urlencoded'}}).then(function(response){
        // success stuff here
    },function(response){
        // failed stuff here
        $log.log(response);
    });

}

然后在您的 PHP 文件中,您可以使用 $_POST var 引用您的数据。

$user = array(
    'username' => $_POST['userName'],
    'password' => $_POST['password'],
    'action' => $_POST['action']
);
echo json_encode($user);

echo json_encode($_POST);

【讨论】:

  • 非常感谢您的回复,我终于从 angular 得到了成功的回复。现在剩下的唯一一件事是我无法弄清楚angular想要解析json的方式。我已经尝试过 fromJson() 但无法将其分解为单个值(例如,response[0].username(未定义抛出错误)、response.username(未定义无错误))
  • 尝试将响应输出到控制台,以便查看可用的对象。您应该能够像任何其他 JS 对象一样使用点符号来引用该对象。如果您没有看到您要查找的内容,请尝试将 response.data 输出到控制台。
【解决方案2】:

该响应不是有效的 JSON,因此您会收到解析错误。如果客户端需要 JSON,而您向其发送 PHP 变量转储,它将不知道如何解析它。

坦率地说,我不明白您的代码应该做什么。看起来您正试图在请求中镜像回发送的数据。

【讨论】:

  • 目前我正在努力实现双向的成功沟通。一步一个脚印。
  • @user2174484 请记住,如果客户端期待 JSON,您需要发回 JSON。您可以执行类似echo json_encode(array('test')); 的操作来测试响应。
【解决方案3】:

尝试使用 $apply() 在 Angular 范围内应用 jQuery ajax 结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-06
    • 2013-07-07
    • 1970-01-01
    相关资源
    最近更新 更多