Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
捕获JavaScript中的访问控制允许源错误_Javascript_Xmlhttprequest_Cors - Fatal编程技术网

捕获JavaScript中的访问控制允许源错误

捕获JavaScript中的访问控制允许源错误,javascript,xmlhttprequest,cors,Javascript,Xmlhttprequest,Cors,我编写了一个函数,它不断返回一个访问控制允许原点错误这对我来说其实很好;我不想修复此问题。我只想捕获它,以便在程序中读取它的消息 导致抛出错误的所有代码都在我的try块中,我的catch块显示错误的字符串消息。但是,当我运行代码时,没有发现错误,并且错误在控制台中以红色显示。如何捕获此错误并存储其消息 try { var xhr = new XMLHttpRequest(); xhr.onload = function() {

我编写了一个函数,它不断返回一个访问控制允许原点错误这对我来说其实很好;我不想修复此问题。我只想捕获它,以便在程序中读取它的消息

导致抛出错误的所有代码都在我的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);
        }
试试看{
var xhr=new XMLHttpRequest();
xhr.onload=函数(){
如果(this.status<400&&this.status>=300){
console.log('此重定向到'+this.getResponseHeader(“位置”));
}否则{
log('不重定向');
}
}
xhr.open('HEAD',$scope.suggLink,true);
xhr.send();
}捕获(e){
log('catch it!');
控制台日志(e.message);
}

虽然浏览器本身会将更详细的错误消息记录到控制台,但您无法从代码访问该消息。见:

出于安全原因,XHRs和Fetch API的错误细节不向JavaScript公开

就规范在这里实际需要的内容而言,Fetch规范定义了发生错误时要提供的“状态消息”的详细信息——即使使用的是XHR API而不是Fetch API(XHR规范引用Fetch规范)。对于浏览器阻止的任何网络错误或响应,Fetch规范要求状态消息为“空字节序列”:

A是一个状态始终为0的响应,状态消息始终为空字节序列,标题列表始终为空,正文始终为空,尾部始终为空

因此,您可以捕获的任何错误对象所能返回的只是“TypeError:Failed to fetch”之类的内容

如果您使用的是XHR,那么处理错误的唯一方法就是
onerror
事件处理程序:

xhr.onerror = function() { console.log("Error occurred but I dunno what exactly.")}
上述(sideshowbarker的)CORS错误解决方法的jquery版本:

let sURL = 'https://www.mocky.io/v2/5185415ba171ea3a00704eed';
$.getJSON(sURL, function (json)
{
    console.log('json from web-service ->', json);
})
.fail(function()
{
    console.log("error - could not get json data from service");
});

遗憾的是,虽然这允许我触发控制台消息,但它不允许我阻止默认错误消息。换句话说,我要澄清的是,不仅XHRs和Fetch API的错误细节没有向JS公开,而且我们也无法阻止它们的显示。超级Lame。使用jquery:$.getJSON(sURL,函数(json){console.log('json from web service->',json);}).fail(函数(){console.log(“error-无法从服务获取json数据”);});