Javascript 阻止调用下一个事件处理程序/回调
我有一个针对AJAX错误的全局错误处理程序: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? } 一旦
$(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,它可能会解决我的问题。