Подтвердить что ты не робот

Как я могу поймать ошибки 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. Наверняка есть лучший способ поймать эти ошибки и не засорить журналы консоли?

4b9b3361

Ответ 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);