我正在尝试添加一个全局错误处理程序,第一个测试是通过一次调用,由于没有 Access-Control-Allow-Origin
header ,我故意导致错误代码 401。
我已使用 Chrome 来显示错误并验证是否引发该错误,但我不知道如何使用处理程序来显示该消息。
jqxhr.status
为 0
,jqxhr.statusText
为 “error”
, throwedError
是一个空字符串。
使用 Chrome,我无法在任何函数变量中找到代码和消息。有没有办法显示 Chrome Debug模式下看到的代码和消息?
$(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 未经授权
响应,并且在使用 Chrome Debug模式时,我可以看到 401 未经授权
和 Access-Control-Allow-起源
错误消息。但是,如果我自己在 Web api 中执行此操作,是否只会发送回调用代码?我认为因为它在 Fiddler 和 Chrome 中都可见,所以它应该在全局 ajaxError
处理程序可见的地方。
更新2 经过更多测试后,这确实与 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);
}
}
});
最佳答案
使用thrownError
.ajaxError
内的参数处理程序。
也可以使用statusCode
$.ajaxSetup()
的选项
$.ajaxSetup({
statusCode: {
401: function(jqxhr, textStatus, errorThrown) {
alert(textStatus + " " + errorThrown)
}
}
})
关于javascript - 使用 ajaxError 全局处理程序显示 HTTP 状态代码 401 详细信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35753398/