jQuery ajax - 在调用statusCode()回调时避免error()回调

Lee*_*cis 17 ajax error-handling jquery http-status-codes

我正在使用jQuery.ajax()连接到我的后端服务.我已经配置了一个error()处理程序和一个statusCode()处理程序.它们都工作正常,但是当我的statusCode处理程序被触发时,错误处理程序也会触发(错误处理程序实际上是先触发).我宁愿这不要发生.我假设这是可能的,而不必破解错误处理程序代码?

我的代码看起来像这样:

$.ajax({
    ...
    error: function(...) { 
        // process a general type of error here
    },
    statusCode: {
        401: function() {
            // process a specific authentication failure
        }
    }                 
});
Run Code Online (Sandbox Code Playgroud)

那么当HTTP状态代码为401时,如何避免error()处理程序触发?

谢谢你好好阅读!

Dav*_*ker 12

您可以轻松检查错误回调中的状态代码.第一个参数应该是XMLHttpRequest(或者jqHXR取决于你的jQuery版本)对象.相应地检查'status'属性以获取错误句柄的状态代码.

例如

error: function(a, b, c){
  if(a.status != 401){
    // handle other errors except authentication

  }
}
Run Code Online (Sandbox Code Playgroud)


Lin*_*iel 7

没有黑客jQuery.ajax,你不能.对我来说,jQuery的ajax方法是该库的痛点之一.为了更明智的请求处理,我建议您查看superagent或其他一些独立的库.


小智 6

改进以前需要对您不希望触发通用事件处理程序的状态代码进行硬编码的变通方法.

在我看来,编辑你的错误处理程序更安全,因为beforeSend可能因为某些其他目的而被覆盖,因此你可能无意中在这些调用上触发了通用错误处理程序.(如果有人覆盖错误回调,他们希望它会影响错误处理,如果他们修改了beforeSend回调,则不会).

所以你会得到:

function ajaxError (jqXHR, textStatus, errorThrown)
{
    if (jqXHR.status in this.statusCode) return;
    // Handle generic events here.

}
Run Code Online (Sandbox Code Playgroud)