我编写了一个不断返回Access-Control-Allow-Origin错误的函数。 这对我来说真的很好;我不想解决这个问题。我只想抓住它,以便我可以在我的程序中阅读它的消息。
导致错误抛出的所有代码都在我的try块中,我的catch块显示错误的字符串消息。但是,当我运行代码时,没有捕获错误,并且错误在控制台中显示为红色。如何捕获此错误并存储其消息?
try {
var xhr = new XMLHttpRequest();
xhr.onload = function() {
if (this.status < 400 && this.status >= 300) {
console.log('this redirects to ' + this.getResponseHeader("Location"));
} else {
console.log('doesn\'t redirect');
}
}
xhr.open('HEAD', $scope.suggLink, true);
xhr.send();
} catch(e) {
console.log('Caught it!');
console.log(e.message);
}
答案 0 :(得分:7)
您唯一可以使用的是onerror
事件处理程序:
xhr.onerror = function() { console.log("Error occurred but I dunno what exactly.")}
虽然浏览器本身会将更详细的错误消息记录到控制台,但您无法从代码中访问该消息。见https://bugs.chromium.org/p/chromium/issues/detail?id=118096#c5:
出于安全原因,XHR和Fetch API的错误细节不会暴露给JavaScript。
就这里实际需要的规格而言,XHR规范引用了Fetch规范,以便在出现错误时提供“状态消息”的详细信息。对于CORS阻止的任何网络错误或请求,Fetch规范要求状态消息为“空字节序列”:
network error是一个响应,其状态始终为0,状态消息始终为空字节序列,标题列表始终为空,正文始终为空,预告片始终为空
答案 1 :(得分:0)
上述(sideshowbarker)解决方案的jQuery版本,可解决CORS错误:
4711-4720