在JavaScript中捕获Access-Control-Allow-Origin错误

时间:2017-03-10 15:07:34

标签: javascript xmlhttprequest cors

我编写了一个不断返回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);
        }

2 个答案:

答案 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