有沒有什麼辦法可以在發出請求時捕獲由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