jQuery Ajax调用对象属性范围

时间:2014-01-18 06:20:36

标签: javascript jquery ajax

过去几天我一直在研究一个问题。我创建了一个处理登录脚本的对象。登录脚本由一个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 ////

1 个答案:

答案 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);

}