捕获XMLHttpRequest跨域错误

有没有办法在发出请求时捕获由Access-Control-Allow-Origin引起的错误? 我正在使用jQuery,并且在.ajaxError()设置的处理程序永远不会被调用,因为请求永远不会开始。

有没有解决方法?

对于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代码无法使用该错误消息(我认为这是出于安全原因,我之前曾问过这个问题: 是否有可能陷入CORS错误? )。

  • xhr.status和xhr.statusText未在onError处理程序中设置,因此您实际上没有任何关于CORS请求失败的有用信息。 你只知道它失败了。

有可能获得错误状态:

 xhr.onerror = function(e) { alert("Error Status: " + e.target.status); }; 

资料来源: https : //developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Using_XMLHttpRequest

onerror设置处理程序,您将能够捕获跨域exception。 我不知道为什么为exception而不是错误事件触发了onerror事件,但我只是测试了它并且它有效。

 req = $.get('http://www.example.com'); req.onerror = function() { alert('An exception occurred.') };