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