有没有什么办法可以在发出请求时捕获由Access-Control-Allow-Origin
引起的错误?我正在使用jQuery,并且.ajaxError()
中设置的处理程序永远不会被调用,因为请求永远不会开始。捕获XMLHttpRequest跨域错误
有什么解决方法吗?
有没有什么办法可以在发出请求时捕获由Access-Control-Allow-Origin
引起的错误?我正在使用jQuery,并且.ajaxError()
中设置的处理程序永远不会被调用,因为请求永远不会开始。捕获XMLHttpRequest跨域错误
有什么解决方法吗?
对于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请求失败的原因。你只知道它失败了。
啊,但是如何区分由CORS限制引起的错误与其他未指定的AJAX错误?在由于CORS而失败的XMLHttpRequest对象的`readyState`,`status`和`statusText`属性中似乎没有任何可辨别的东西。 – kpozin 2011-08-05 02:31:59
我不认为这是可能的,看到这个问题:http://stackoverflow.com/questions/4844643/is-it-possible-to-trap-cors-errors – monsur 2011-08-10 21:48:07
XDomainRequest已弃用 – mate64 2015-04-12 18:32:09
设置一个处理程序的onerror,你就能够赶上跨域例外。我不知道为什么事件是因异常而被触发的,而不是错误事件,但我只是测试了它并且它工作正常。
req = $.get('http://www.example.com');
req.onerror = function() { alert('An exception occurred.') };
很可能得到像这样的错误状态:
xhr.onerror = function(e) {
alert("Error Status: " + e.target.status);
};
来源:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest
可能有用的信息:[使用XMLHttpRequest检测错误(http://ajaxpatterns.org/XMLHttpRequest_Call #Detecting_Errors) – drudge 2011-02-16 18:30:49