Jquery ajaxsetup:仅捕获 401 错误,否则让自定义错误处理程序完成工作

Jquery ajaxsetup: Catch only 401 error else let the custom error handler do the job

我有一个复杂的应用程序 (.NET 5 MVC 5),它执行各种 ajax 调用。 我想在全球范围内只处理 401 个未经授权的请求。

这段经典代码在全球范围内都能发挥作用

$.ajaxSetup({
    error: function (jqXHR, textStatus, errorThrown) {
        if (jqXHR.status == 401) {//Unauthorized
            //it will redirect to the same document, so authentication will take place and will go back to login
            window.location.href = document.URL;
        }
    }
});

但是它在全局范围内捕获所有内容,而我只需要它捕获 401 并让定义的错误函数完成其余的工作。

我的意思是,比如我有:

function dropYear_changed(data) {
    $.ajax({
     url: '@Url.Action("aaa", "vvv")',
     type: "get",
     contentType: 'application/x-www-form-urlencoded',
     data: data,
        success: function (result) {
            //Do stuff
     },
     error: function(error) {
     //show some alert, toast, do error stuff
     }
 });
}

全局 ajax 它不会做

//show some alert, toast, do error stuff

因为 ajax安装程序将接管。 我想在全球范围内捕获 401,但如果错误不是 401,则执行其他操作,并且在 ajax 错误中定义了其他内容:

我该怎么做?

您只能在 $.ajaxSetup 中使用 statusCode 函数捕获特定错误。试试下面的代码:

$.ajaxSetup({
    statusCode: {
        401: function() {
            alert("401");
        }
    }
});

当响应状态为 401 时,此函数会发出警报。这样您就可以全局捕获 401,如果错误不是 401,则执行其他操作。