2010-07-30 28 views

回答

3

不幸的是有没有办法做你以后,不是这样的,你必须设置一个全局变量或一些其他的一些途径。如果你看看how the jQuery success function works

handleSuccess: function(s, xhr, status, data) { 
    // If a local callback was specified, fire it and pass it the data 
    if (s.success) { 
    s.success.call(s.context, data, status, xhr); 
    } 

    // Fire the global callback 
    if (s.global) { 
    jQuery.ajax.triggerGlobal(s, "ajaxSuccess", [xhr, s]); 
    } 
} 

你可以看到它只是排序的问题,当地success处理总是发生前的全球事件被激发,这将触发任何$.ajaxSuccess()处理程序。做你追求的最简单的方法是调用任何功能,可以根据当地的success处理程序的开始取消,就像这样:

$.ajax({ 
    //options... 
    success: function(data) { 
    if(shouldIBeCanceled()) return; 
    //rest of code... 
    } 
}); 

另一种方法是编辑的jQuery核心,或延长它,这将一定程度上产生插件的不可预知的行为,所以我不会沿着这条路线走下去,因为它在升级时也可能会带来新的痛苦。