捕获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.') };
- 跨域AJAX预检失败原点检查
- 请在401时帮助测试Firefox jQuery ajax中的CORS问题
- CORS无法在Chrome上运行
- 无法在JQuery 1.6.4中使用CORS进行PUT / POST / DELETE HTTP调用
- Java Spring REST API CORS不适用于通过jQuery与Chrome进行DELETE请求
- 在$ .POST上获取ERR_EMPTY_RESPONSE
- 读取和解析unicode json数据在IE和FF中不起作用
- Angular $ http.delete CORS错误(预检请求)
- CORS问题 – 请求的资源上没有“Access-Control-Allow-Origin”标头