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
Ответы
Ответ 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 (для внутренней ошибки сервера), ошибка была чем-то другим в некотором другом коде.
Пожалуйста, проверьте это тоже.