ajaxError()在$ .ajax错误处理程序之后执行

时间:2018-02-16 14:27:14

标签: javascript jquery ajax

我发这样的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 staffsome staff 2之前运行。

UPD。

正如评论中所提到的,本地错误处理程序总是在全局之前执行。所以现在我的问题是:我如何检查内部全局处理程序是否已分配本地处理程序?

3 个答案:

答案 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;