过去几天我一直在研究一个问题。我创建了一个处理登录脚本的对象。登录脚本由一个PHP脚本处理,回显出一个json对象:
{'status' : true} // could also be false
ajax请求每次都完成,我可以使用console.log()它。问题出在回调函数中。我从文档中尝试了以下允许的参数/函数:
complete
success
.done()
在回调中,我试图根据返回设置对象属性/变量。在第二次运行脚本之前,它不会看到此分配。我假设它是因为某些东西在另一个或范围问题之前运行?
所以澄清一下: 让我们说脚本运行,我恢复正常。然后我想将对象属性的状态设置为而不是false。我在回调中放了一个console.log()并且每次都有效,但主要对象不会看到它,除非我提交两次。
这是代码。任何和所有帮助表示赞赏:
var loginAuth = {
form : $('form'),
status : false,
init : function() {
loginAuth.ajaxCall();
},
ajaxCall : function(loginData) {
// Get Post variables
var loginData = {
username : $('input[name=username]').val(),
password : $('input[name=password]').val()
};
// Proccess the form
$.ajax(
{
url : "http://localhost/url-where-results-are",
dataType : "json",
type : "post",
data : loginData,
}).done(function(data) {
if(typeof data != 'object')
{
$.parseJSON(data);
} else {
loginAuth.status = data;
console.log(loginAuth.status);
}
});
}
} //// END loginAuth Object ////
答案 0 :(得分:0)
你有些不对劲。如果它是一个对象,你只想$.parseJson
。此外,您不需要调用它,因为jQuery会为您处理解析。
if(typeof data != 'object')
{
$.parseJSON(data);
} else {
loginAuth.status = data;
console.log(loginAuth.status);
}
这是正确的:
if(typeof data == 'object') {
alert(data.status);
if(data.status == true) {
loginAuth.status = true;
} else {
loginAuth.status = false;
}
} else {
console.log(data);
}