使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息

Using ajaxError global handler to display HTTP status code 401 details

本文关键字:状态 代码 详细信息 HTTP 显示 ajaxError 全局 处理 程序 使用      更新时间:2023-09-26

我正在尝试添加一个全局错误处理程序,第一次测试是在一个调用中,由于没有Access-Control-Allow-Origin标头,我故意导致错误代码 401。

我已经使用 Chrome 显示错误并验证它是否已抛出,但我无法弄清楚如何使用处理程序来显示该消息。

jqxhr.status 0 jqxhr.statusText "error"thrownError为空字符串。

使用 Chrome,我无法在任何函数变量中找到代码和消息。有没有办法显示Chrome调试模式下看到的代码和消息?

$(document).ajaxError(function (event, jqxhr, settings, thrownError) {
    alert("Global Error Catch. Error of " + thrownError + " at url = " + settings.url + " event type of " + settings.type
        + " with event data of " + event.data + " and event type of " + event.type + " and event target of " + event.target
        + " and the jqXHR.status is " + jqxhr.status + " and jqXHR.statusText is " + jqxhr.statusText
        + " and the jqXHR.responseText  is " + jqxhr.responseText + " and jqXHR.responseXML  is " + jqxhr.responseXML);
});

再次查看代码,我注意到按钮单击事件使用 jQuery.when() 来查找一些输入变量值,然后最终进行触发 401 的 ajax 调用。这可能就是为什么ajaxError没有在thrownError中显示错误的原因吗?

更新经过进一步测试,这与jQuery.when()无关。但这是否与我正在发出跨域 ajax 请求的事实有关?

Fiddler至少可以看到401 unauthorized响应,并且在使用Chrome调试模式时,我可以看到401 unauthorizedAccess-Control-Allow-Origin错误消息。但是,如果我在 web api 中自己做,这只会发送回调用代码吗?我认为由于它在 Fiddler 和 Chrome 中都是可见的,因此它应该在全局ajaxError处理程序可见的地方。

更新2经过更多测试,这确实与 CORS 请求的性质有关,而不是我如何使用全局错误捕获。我可能需要就该特定主题创建一个单独的问题。

我也尝试了下面的代码,jqXHR.status返回 0 和 textStatus = "error"errorThrown="" .我认为这类似于这里发布的问题,用于小提琴手中的 0 状态代码 401,但我没有看到发布的解决方案。我将搜索与此类似的帖子,如果我找到一个,我会将其作为答案。

$.ajaxSetup({
    error: function (jqXHR, textStatus, errorThrown) {
        if (jqXHR.status == 401) {
            alert("Error 401 : " + textStatus + ": " + errorThrown);
        } else {
            alert("Error: " + textStatus + ": " + errorThrown);
        }
    }
});

在处理程序中使用thrownError参数.ajaxError

也可以使用statusCode $.ajaxSetup()选项

$.ajaxSetup({
  statusCode: {
    401: function(jqxhr, textStatus, errorThrown) {
      alert(textStatus + " " + errorThrown)
    }
  }
})