Как я могу поймать ошибки JQuery AJAX?
Когда запрос AJAX отправляется на сайт, ошибки на стороне сервера легко обрабатываются с помощью подхода обещания jQuery. .done()
, .fail()
и т.д. Однако для некоторых запросов (например, к недопустимому сайту или к тому, который не принимает запросы с кросс-началом), исключение происходит сразу же после вызова. Вот пример одной ошибки в консоли:
XMLHttpRequest не может загрузить http://someotherserver/api/blahblah
. происхождения http://localhost:52625
не допускается с помощью Access-Control-Allow-Origin.
Да, я знаю о CORS... это не проблема. То, что я на самом деле делаю, - это попытку вызова веб-api для проверки правильности IP-адреса сервера.
Я знаю параметр error
в синтаксисе запроса jQuery:
$.ajax({
url: remoteURL,
type: 'GET',
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).etc.etc.
Ошибка обрабатывается здесь, но исключения все еще регистрируются в консоли. Казалось разумным обернуть это выше в блоке try-catch
, но это, похоже, не помогает.
Я нашел этот вопрос, но решение включает взлом кода jQuery. Наверняка есть лучший способ поймать эти ошибки и не засорить журналы консоли?
Ответы
Ответ 1
попробуйте следующее:
$.ajax({
url: remoteURL,
type: 'GET',
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
}).always(function(jqXHR, textStatus) {
if (textStatus != "success") {
alert("Error: " + jqXHR.statusText);
}
});
Слушатель XHR:
$.ajax({
url: remoteURL,
type: 'GET',
xhr: function(){
var xhr = new window.XMLHttpRequest();
xhr.addEventListener("error", function(evt){
alert("an error occured");
}, false);
xhr.addEventListener("abort", function(){
alert("cancelled");
}, false);
return xhr;
},
error: function (err) {
console.log("AJAX error in request: " + JSON.stringify(err, null, 2));
}
});
Ответ 2
Вы можете использовать консоль веб-разработчиков в Google Chrome. Нажмите F12. И используйте вкладку "Сети" для проверки ответа. А для ошибок JavaSvript и jQuery и Ajax вы можете использовать вкладку "Консоль".:)
Попробуйте это, добавив в свою функцию ajax:
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);