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

时间:2016-03-02 16:52:29

标签: javascript jquery ajax error-handling

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

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

jqxhr.status0jqxhr.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错误消息。但是,如果我自己在网络API中执行此操作,那么它是否只会被发送回调用代码?我假设它在Fiddler和Chrome中都可见,它应该是全局ajaxError处理程序可见的地方。

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

我还尝试了以下代码,jqXHR.status返回0,textStatus = "error"errorThrown=""。我认为这类似于here on status code 0 for a 401 in fiddler发布的问题,但我没有看到发布的解决方案。我会搜索类似的帖子,如果我找到一个,我会把它作为答案。

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

1 个答案:

答案 0 :(得分:1)

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

可以使用statusCode

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