我使用$ .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中的数据,我会得到意外令牌错误。我不确定我做错了什么,我之前使用过这个设置,它以前总是有用,但由于某种原因它现在不行。有谁看到我出错的地方?
{"status":true,"success":"Login Success","message":"You have been logged in successfully."}
编辑2:这是我的控制台屏幕。 top .length调用是从console.log(data)
记录的json,底部的是来自chrome dev工具网络选项卡中的响应,来自php脚本的响应。他们完美排队但第二个显示长度为93,我该如何解决这个问题呢?
答案 0 :(得分:0)
我正在jQuery Docs上阅读并发现“dataType:jsonp”无法与同步请求一起使用,而且您正在提出此类请求,因为您有async: false
。打开它可能会解决您的问题。
另外,请查看文档。
祝你好运!答案 1 :(得分:0)
所以我找到了解决这个问题的方法,首先我对数据进行了JSON.stringify,然后是JSON.parse,最后是$ .parseJSON()来获取一个javascript对象。不知道为什么在它离开PHP脚本并到达$ .ajax调用之间添加了2个不可见字符,所以如果有人知道为什么让我知道