Есть ли способ уловить ошибку, вызванную Access-Control-Allow-Origin
при выполнении запроса? Я использую jQuery, и обработчик, установленный в .ajaxError()
, никогда не вызывается, потому что запрос никогда не начинался с.
Есть ли способ обхода?
Есть ли способ уловить ошибку, вызванную 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, и вы сможете поймать междоменные исключения. Я не знаю, почему событие onerror запускается для исключений, а не ошибка, но я только что протестировал его, и он сработал.
req = $.get('http://www.example.com');
req.onerror = function() { alert('An exception occurred.') };