在jQuery.ajax调用中来自php的json响应问题

时间:2013-06-28 00:26:10

标签: php javascript jquery ajax json

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

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

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

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

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

2 个答案:

答案 0 :(得分:0)

我正在jQuery Docs上阅读并发现“dataType:jsonp”无法与同步请求一起使用,而且您正在提出此类请求,因为您有async: false。打开它可能会解决您的问题。

另外,请查看文档。

祝你好运!

答案 1 :(得分:0)

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