.ajaxComplete阻止任何回调调用。可能吗?

时间:2011-07-14 11:39:05

标签: jquery

我有一个用PHP编写的后端和jQuery的前端..我想做什么:

  1. 页面包含几个带有AJAX调用的链接(每个调用都有自己的成功/错误回调)
  2. php后端可能会返回这样的回复:{“must_relogin”:true}
  3. 我必须绑定到jQuery中的某种全局AJAX事件来捕获此响应并执行一些我的逻辑并阻止任何其他回调
  4. 有可能吗?

    感谢您的帮助。

    更新

    jQuery(document).ajaxComplete(function(a, b, c){ 
     console.log(a, b, c);
     b.abort();
     return false; });
    

3 个答案:

答案 0 :(得分:2)

您是否尝试过使用event.stopImmediatePropagation()?它声明“阻止其他事件处理程序被调用”。从查看jQuery源代码我们看到了这个

if ( fireGlobals ) {
    globalEventContext.trigger( "ajaxComplete", [ jqXHR, s] );
    // Handle the global AJAX counter
    if ( !( --jQuery.active ) ) {
        jQuery.event.trigger( "ajaxStop" );
    }
}

以下是可能解决您的问题的工作示例http://jsfiddle.net/Akkuma/95zfj/

需要注意的是,如果ajaxCompletes并非全部绑定到同一元素,它似乎不起作用。

答案 1 :(得分:0)

我不确定您的方案,但这里是一个SO链接

Abort Ajax requests using jQuery

解释了使用 ajax 中止.abort来电,但如果已对服务器进行了调用,则.abort无法关闭与服务器的现有连接,无论如何都会执行已经完成的ajax调用的所有success回调......

HTH

答案 2 :(得分:0)

如果我正确理解了问题,则无法根据响应字符串阻止回调调用。问题是在执行回调之后调用ajax全局事件处理程序,如ajaxSuccess和ajaxComplete。