我想注册一个全局的ajaxSuccess处理程序,它会在某些条件下取消调用函数的特定ajaxSuccess处理程序。
有没有办法实现这个目标?
提前致谢
答案 0 :(得分: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核心,或者扩展它会产生一些不可预测的插件行为,所以我不会走这条路,因为它也可能在升级时引入新的痛苦。