我发这样的AJAX请求:
$.ajax({
url: "/user/logout/",
type: 'POST',
success: function() {
window.location.href = '/';
},
error: function() {
// some staff
}
});
我还定义了全局ajaxError
处理程序:
$(document).ajaxError(function(event, jqXHR, settings, error) {
if (jqXHR.status === 403) {
alert(error);
// some staff 2
}
});
问题是error
处理函数在alert
关闭ajaxError()
之前执行,而some staff
在some staff 2
之前运行。
UPD。
正如评论中所提到的,本地错误处理程序总是在全局之前执行。所以现在我的问题是:我如何检查内部全局处理程序是否已分配本地处理程序?
答案 0 :(得分:0)
你可以尝试使用带有setTimeout的脏块来延迟
setTimeout(function(){
// some staff
}, 150);
但是我说得很糟糕。
答案 1 :(得分:0)
最后我找到了解决方案:
$(document).ajaxError(function(event, jqXHR, settings, error) {
if(settings.error === undefined) {
if(jqXHR.status === 403) {
alert(error);
// some staff 2
}
// more....
}
});
答案 2 :(得分:-1)
UPD。
正如评论中所提到的,本地错误处理程序总是在之前执行 全球。所以现在我的问题是:我如何检查内部全局处理程序是什么 是否分配了本地处理程序?
您可以将本地处理程序中的某些全局变量更改为标记。
并在全局处理程序中检查此全局标志的值。它不是干净的代码,但如果在某些“通用”全局对象中创建这样的标志,则可以减少它。喜欢
obFlagsForEvents = {};
obFlagsForEvents["id_of_form_to_check"] = false;