Javascript 覆盖特定状态代码的jQuery默认ajaxError
我正在尝试为AJAX调用实现一个jQuery默认HTTP错误处理程序。我已经实现了通用应用程序错误的默认错误处理程序,如下所示: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;
$(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代码时,才执行默认处理程序。