代码之家  ›  专栏  ›  技术社区  ›  antonioh

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

  •  1
  • antonioh  · 技术社区  · 16 年前

    我想注册一个全局AjaxSuccess处理程序,在某些情况下,它将取消调用函数的特定AjaxSuccess处理程序。

    有没有办法做到这一点?

    提前谢谢

    1 回复  |  直到 16 年前
        1
  •  3
  •   Nick Craver    16 年前

    不幸的是,没有一种方法可以实现你想要的,而不是那样,你必须设置一个全局变量或其他路径。如果你看看 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核心,或者对其进行扩展,这会给插件带来一些不可预知的行为,所以我不会走这条路,因为它也可能在升级时带来新的痛苦。