AJAX JQuery Deferred回调只被调用一次

时间:2011-03-21 16:02:21

标签: javascript jquery ajax jquery-deferred

我正在几个jquery ajax对象上注册回调。

所以我有:

function main_getLogin( options ){
    g_userXHR = $.ajax({
        url:'ajx/_account.aspx',  
        type:'POST' ,cache:false, dataType:'json'
        })
        .success( function(data){
            //var loginData = data.ACCOUNT_INFO;
            //dlog(data);
    });

}

稍后回电话 - 其他地方

g_userXHR.success(function(d,status){
d = d.ACCOUNT_INFO;
if(d.NAME != "" && d.ERRORS.length == 0){//logged in

    $('#myRHpage .registeredUser').show();
    $('#myRHpage .unregisteredUser').hide();
    setupTabs();
}
else{//user is not logged in 

    $('#myRHpage .unregisteredUser').show();
    $('#myRHpage .registeredUser').hide();
}

});

这个回调以及所有其他人在我第一次开始时完美运作

main_getLogin();

直接连接到g_userXHR的.success每次被调用,但是在函数外部附加的其他回调仅在我第一次调用main_getLogin()时被触发;

另外,有没有办法声明一个ajax对象并在以后发送它。 比如g_userXHR.send();

谢谢

1 个答案:

答案 0 :(得分:0)

如果那个“其他地方”的代码在每次调用“main_getLogin()”时都没有重新添加那些“成功”回调,那么它们将不会被运行。每次调用“$ .ajax”构造一个全新的“Deferred”对象,所以你对第一个对象所做的不会影响jQuery为你构建的下一个对象。

如果你想总是在成功时做某些事情,你可以使用“$ .ajaxSuccess()”:

$.ajaxSuccess(function() { ... });