Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阻止调用下一个事件处理程序/回调_Javascript_Jquery_Ajax - Fatal编程技术网

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

Javascript 阻止调用下一个事件处理程序/回调,javascript,jquery,ajax,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错误的全局错误处理程序:

$(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()
不起作用。

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

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

    // ...

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

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

以下是正在触发的ajax事件的完整列表:

调用
complete
ajaxComplete
事件的目的是不考虑请求状态(成功或错误)。如果它的执行取决于
ajaxErrorHandler
中设置的某些条件,我认为它不应该再绑定到
complete

您可以在
success
error
上插入当前的
complete
回调,这样在全局事件处理程序中调用
evt.stopPropagation()
evt.stoppimediatepropagation()
将阻止回调执行


处理成功/失败事件的jQuery代码为

如您所见,它涉及两个不同的延迟对象(一个处理
已解决/已拒绝的
部分,一个处理
已完成的
部分),以及两个单独的事件触发器


没有任何内置方法可以彻底中断此流:全局
ajaxError
事件的处理与以下
complete
ajaxComplete
事件完全分开。

我认为您不能这样做,因为在调用ajaxError处理程序之前,将调用完整的处理程序打电话。。见@Roko我不认为这个问题是重复的。至少,问题明显不同。@Arun From:
complete
-当请求完成时(在执行
success
error
回调后)调用的函数。我绝对确信,在我的代码中,某些事件处理程序在
ajaxError
之后执行。complete在成功后调用,而不是在事件回调之后调用。感谢您的响应。这对我不起作用。在
事件.stopPropagation()之后执行的代码。我不知道这段代码连接到哪个回调/事件。可能是另一个事件处理程序附加到ajaxComplete事件。您可以使用$.ajaxSetup()并为其提供设置对象,该对象应声明为全局为false,然后注册您的处理程序。我认为代码附加到本地
complete
回调。在
jQuery.ajax()
参数中定义的代码。可能不应该执行的代码在事件之前被调用?@UnTraDe它在
ajaxError
之后执行。我在调试器中测试它。谢谢你的回复。我的AJAX请求是由JavaScript库发出的,我对它们的控制有限。但是,即使我完全控制了代码,我仍然希望处理全局
ajaxError
(我重定向到那里的错误页面)中的一些最关键的错误,而不会在页面刷新之前执行其他操作。如何“重定向到错误页面”?如果使用
window.location.assign(url)
,它将停止当前页面上的所有javascript执行。我刚刚尝试过。它不会停止JavaScript。甚至紧跟在
window.location.assign(url)
之后的行也会被执行。如果我找到一种方法停止页面上的所有JavaScript,它可能会解决我的问题。