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

JQuery: исключение ajax catch

Многие неудачные запросы jQuery ajax загрязняют мою консоль ошибками. Посмотрите на код, который производит эти ошибки консоли (jQuery 1.7.2, строка 8240)

                // Do send the request
                // This may raise an exception which is actually
                // handled in jQuery.ajax (so no try/catch here)
                xhr.send( ( s.hasContent && s.data ) || null );

Я замечаю, что комментарий объясняет, почему там нет try/catch. Однако, несмотря на то, что у меня есть явная функция обратного вызова error в моем запросе jQuery.ajax, у меня все еще нет тех ошибок, которые обрабатываются jQuery.ajax.

Как я могу обрабатывать ошибки jQuery ajax таким образом, чтобы сообщения об ошибках не отображались в консоли?

Изменить: Ниже приведен фрагмент кода, который выполняет запрос ajax, и точное сообщение об ошибке (в Chrome):

$.ajax({
    dataType: 'xml',
    url: "./python/perfdata.xml?sid=" + (new Date()),
    success: function (data) {
        var protocols = $("Protocols", data).children();

        parseData(protocols);
    },
    error: function (error) {
        setTimeout(getData, 200);
    }
});

И вот сообщение об ошибке Chrome:

GET
http://zeus/dashboard/python/perfdata.xml?sid=Thu%20May%2024%202012%2016:09:38%20GMT+0100%20(GMT%20Daylight%20Time)
jquery.js:8240
4b9b3361

Ответ 1

Вы можете попробовать это (в хром хорошо работает), если для тестирования, переопределив функцию "отправить":

$(function() {

    var xhr = null;

    if (window.XMLHttpRequest) {
        xhr = window.XMLHttpRequest;
    }
    else if(window.ActiveXObject('Microsoft.XMLHTTP')){
        // I do not know if this works
        xhr = window.ActiveXObject('Microsoft.XMLHTTP');
    }

    var send = xhr.prototype.send;
    xhr.prototype.send = function(data) {
        try{
            //TODO: comment the next line
            console.log('pre send', data);
            send.call(this, data);
            //TODO: comment the next line
            console.log('pos send');
        }
        catch(e) {
            //TODO: comment the next line
            console.log('err send', e);
        }
    };

    $.ajax({
        dataType: 'xml',
        url: "./python/perfdata.xml?sid=" + (new Date()).getTime(),
        success: function (data) {
            var protocols = $("Protocols", data).children();

            parseData(protocols);
        },
        error: function (error) {
            setTimeout(getData, 200);
        }
    });
});

test

Ответ 2

Вы можете использовать пользовательскую функцию для этого

 $(document).ajaxError(ajaxErrorHandler); 

и установите все, что вам нужно сделать в этом обработчике

var ajaxErrorHandler = function () {
        //do something
    }

Ответ 3

Вы пытались?

  $.ajaxSetup({
    timeout:10000,
    beforeSend: function(xhr) {
      //
    },
    complete:function(xhr,status) {
      //
    },      
    error: function(xhr, status, err) {
      switch (status){
      case 'timeout': {}
      case 'parseerror': {}
      case 'abort': {}
      case 'error': {}
      default: {}
      }
    }
  });

Ответ 4

Я получал 500 внутренних ошибок сервера и когда он указывал мне на строку xhr.send( ( s.hasContent && s.data ) || null );

Но когда я проверял журналы apache (для внутренней ошибки сервера), ошибка была чем-то другим в некотором другом коде.

Пожалуйста, проверьте это тоже.