Javascript 覆盖特定状态代码的jQuery默认ajaxError

Javascript 覆盖特定状态代码的jQuery默认ajaxError,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在尝试为AJAX调用实现一个jQuery默认HTTP错误处理程序。我已经实现了通用应用程序错误的默认错误处理程序,如下所示: $(document).ajaxError(function(event, jqXHR, settings, thrownError) { switch (jqXHR.status) { case 403: console.log('Forbidden, go away!'); break;

我正在尝试为AJAX调用实现一个jQuery默认HTTP错误处理程序。我已经实现了通用应用程序错误的默认错误处理程序,如下所示:

$(document).ajaxError(function(event, jqXHR, settings, thrownError) {
    switch (jqXHR.status) {
        case 403:
            console.log('Forbidden, go away!');
            break;
        case 404:
            console.log('Resource not found :O');
            break;
        case 422:
            console.log('Unprocessable entity.');
            break;
        case 500:
            console.log('Someone have to pay for this!');
            break;
        default:
            console.log('Anyone knows what is going on here?');
    }
});
现在我想要实现的是在单个AJAX调用中重写特定的状态代码。比如说

$.ajax({
    ...
    error: function(jqXHR, textStatus, errorThrown) {
         if(jqXHR.status === 404){
             console.log('The requested unicorn is actually missing');
         }
    }
})
现在,如果我按照上面所示实现,将显示两条消息

>The requested unicorn is actually missing
>Resource not found :O
当我试图只获取
时,请求的独角兽实际上丢失了
消息

在单个AJAX调用设置中设置
global:false
标志意味着忽略该AJAX调用中的所有全局AJAX函数,不幸的是,对于我的应用程序来说,这不是一个可行的解决方案


有什么想法吗?谢谢

您可以执行以下操作

$.ajax({
    handleErrors: [404],
    ...
    error: function(jqXHR, textStatus, errorThrown) {
        if(jqXHR.status === 404){
            console.log('The requested unicorn is actually missing');
        }
    }
});
然后在全局处理程序中检查错误是否已处理

$(document).ajaxError(function(event, jqXHR, settings, thrownError) {
    if (settings.handleErrors && settings.handleErrors.indexOf(jqXHR.status) !== -1) {
        return;
    }
    switch (jqXHR.status) {
        case 403:
            console.log('Forbidden, go away!');
            break;
        case 404:
            console.log('Resource not found :O');
            break;
        case 422:
            console.log('Unprocessable entity.');
            break;
        case 500:
            console.log('Someone have to pay for this!');
            break;
        default:
            console.log('Anyone knows what is going on here?');
    }
});

谢谢您的解决方案实际上非常有效!我没有注意到jQuery文档中的
句柄错误。回答得好
handleErrors
是自定义属性,您可以随意设置名称。您是对的,这是因为ajax设置使用
$进行了扩展。extend
全局选项应该已经起作用,请查看此小提琴。从jQuery文档:
global:是否为此请求触发全局ajax事件处理程序。默认值为true。设置为false可防止触发ajaxStart或ajaxStop等全局处理程序。这可用于控制各种Ajax事件
。此行为在任何情况下都会阻止全局处理程序执行!这里我需要的是,如果由单个ajax调用处理,则只覆盖特定的状态代码,并且仅当未通过应用程序处理HTTP代码时,才执行默认处理程序。