0

我正在使用 $.ajax 从 php 脚本中获取 JSON 响应。如果我从 $.ajax 成功函数记录数据变量,它会输出格式正确的 JSON 对象,但是当我尝试访问数据变量的属性时,它是未定义的。这是被发回的php:

echo json_encode(array("status"=>true, "success"=>"Login Success", "message"=>"You have been logged in successfully."));

这是我的ajax调用:

$.ajax({
        type: "POST",
        data: {
            login: true,
            username: $('#login-username').val(),
            password: $('#login-password').val()
        },
        async: false,
        url: "./php/client-login.php",
        success: function (data) {
            console.log(data.status);
            if (data.status) {
                console.log(data.success);
                displayModal(data.success, data.message, "./js/login-modal-code.js");
            } else if (!data.status) {

                displayModal(data.error, data.message, "./js/login-modal-code.js");
            }
        },
        error: function (jqXHR, status, responseText) {
            console.log(status);
        }
});

如果我将dataType: "json"选项添加到 $.ajax 调用,我会收到一个解析错误,如果我尝试$.parseJSON(data);访问 data var 中的数据,我会收到意外的令牌错误。我不太确定我做错了什么,我以前使用过这个设置,它以前一直有效,但由于某种原因现在不是。有人看到我哪里出错了吗?

编辑:这里忘了提到的是来自 php 脚本的响应:

{"status":true,"success":"Login Success","message":"You have been logged in successfully."}

编辑 2:这是我的控制台的屏幕。顶部 .length 调用是记录的 json,console.log(data)底部调用来自 chrome 开发工具网络选项卡中的响应,用于 php 脚本的响应。他们完美地排列,但第二个显示长度为 93,我该如何解决这个问题?控制台图像

4

2 回答 2

0

我在jQuery Docs上阅读,发现“dataType: jsonp”不适用于同步请求,并且你正在发出这种请求,因为你有async: false. 打开它可能会解决您的问题。

另外,看看文档。

祝你好运!

于 2013-06-28T00:40:52.447 回答
0

所以我想出了一个解决这个问题的方法,首先我对数据执行 JSON.stringify,然后是 JSON.parse,最后是 $.parseJSON() 来获取一个 javascript 对象。不知道为什么在离开 php 脚本并到达 $.ajax 调用之间添加了 2 个不可见字符,所以如果有人知道为什么让我知道

于 2013-06-28T19:22:05.573 回答