在发出请求时,有没有办法捕获Access-Control-Allow-Origin
引起的错误?我正在使用jQuery,并且.ajaxError()
中设置的处理程序永远不会被调用,因为请求永远不会开始。
有解决方法吗?
答案 0 :(得分:18)
对于CORS请求,应该触发XmlHttpRequest的onError处理程序。如果您有权访问原始XmlHttpRequest对象,请尝试设置一个事件处理程序,如:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var url = 'YOUR URL HERE';
var xhr = createCORSRequest('GET', url);
xhr.onerror = function() { alert('error'); };
xhr.onload = function() { alert('success'); };
xhr.send();
请注意以下几点:
在CORS请求中,浏览器的console.log将显示错误消息。但是,您的JavaScript代码无法使用该错误消息(我认为这是出于安全原因,我之前曾问过这个问题:Is it possible to trap CORS errors?)。
xhr.status和xhr.statusText未在onError处理程序中设置,因此您实际上没有任何关于CORS请求失败的有用信息。你只知道它失败了。
答案 1 :(得分:5)
可能会出现错误状态:
xhr.onerror = function(e) {
alert("Error Status: " + e.target.status);
};
来源:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
答案 2 :(得分:2)
为 onerror 设置处理程序,您将能够捕获跨域异常。我不知道为什么 onerror 事件是针对异常而不是错误事件触发的,但我刚测试它并且它有效。
req = $.get('http://www.example.com');
req.onerror = function() { alert('An exception occurred.') };