jquery:如何从全局ajaxSuccess处理程序中取消特定的ajaxSuccess处理程序

时间:2010-07-30 09:34:58

标签: jquery

我想注册一个全局的ajaxSuccess处理程序,它会在某些条件下取消调用函数的特定ajaxSuccess处理程序。

有没有办法实现这个目标?

提前致谢

1 个答案:

答案 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核心,或者扩展它会产生一些不可预测的插件行为,所以我不会走这条路,因为它也可能在升级时引入新的痛苦。