防止调用下一个事件处理程序/回调

时间:2014-02-27 03:17:12

标签: javascript jquery ajax

我有一个AJAX错误的全局错误处理程序:

$(document).ready(function() {
    $(document).ajaxError(ajaxErrorHandler);
});

function ajaxErrorHandler(event, jqxhr, settings, exception) {

    // ...

    // How to stop further processing of the AJAX response here?
}

一旦我处理了错误,我就不希望进一步处理AJAX响应。如何停止执行complete回调? (我的AJAX请求是在库中进行的,我无法定义它们的参数。)

更新

调用jqxdr.abort()无法完成任务。

2 个答案:

答案 0 :(得分:2)

您可以在处理程序中尝试此操作:

function ajaxErrorHandler(event, jqxhr, settings, exception) {

    // ...

    // How to stop further processing of the AJAX response here?
    event.stopPropagation();
}

它将停止对父处理程序的事件传播。

答案 1 :(得分:1)

以下是触发的ajax事件的完整列表:jQuery doc

无论请求状态(成功或错误)如何,都将调用completeajaxComplete事件的目的。如果它的执行取决于ajaxErrorHandler中设置的某些条件,我认为它不应再被绑定到complete

您可以在completesuccess上插入一次当前的error回调,以便在全局事件处理程序中调用evt.stopPropagation()evt.stopImmediatePropagation()阻止回调执行。


处理成功/失败事件继承的jQuery代码是here

如您所见,它涉及2个不同的延迟对象(一个处理resolved / rejected部分,一个处理completed部分)和两个单独的事件触发器。

没有内置方法可以干净地中断此流程:全局ajaxError事件的处理与以下completeajaxComplete事件完全分开。