不幸的是,没有一种方法可以实现你想要的,而不是那样,你必须设置一个全局变量或其他路径。如果你看看
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()
处理程序。最简单的方法是调用任何可能在本地开始时取消的函数
成功
处理程序,如下所示:
$.ajax({
//options...
success: function(data) {
if(shouldIBeCanceled()) return;
//rest of code...
}
});
另一种选择是编辑jquery核心,或者对其进行扩展,这会给插件带来一些不可预知的行为,所以我不会走这条路,因为它也可能在升级时带来新的痛苦。