Кажется, что успех, ошибка и полные обратные вызовы только стреляют, когда запрос ajax может получить некоторый ответ от сервера.
Таким образом, если я закрыл сервер, следующий ошибочный обратный вызов не выполняется, и запрос перестал работать тихо.
$.ajax({
type: "GET",
url: "http://localhost:3000/",
dataType: "script",
success: function() {
alert("success");
},
error: function() {
alert("error");
}
});
Что является лучшим способом бросить ошибку, когда сервер не может быть достигнут вообще.
Редактирование - Из того, что я попробовал и читал, кажется, что jQuery создал в обработке ошибок, не работает с JSONP или типом данных: "сценарий". Таким образом, я собираюсь попытаться установить ручной тайм-аут.
Редактирование - немного больше исследовало, и оно похоже не, только делает ajax ошибочный обратный вызов не, работают, но и Вы не можете прервать запрос ajax со сценарием типа данных или jsonp, и те запросы игнорируют установку тайм-аута.
Существует альтернатива - плагин jquery-jsonp, но это использует скрытый iframes, которого я избежал бы. Таким образом, я обосновался на создании ручного тайм-аута, как предложено ниже. Вы не можете прервать запрос, если он испытает таймаут, что означает, что сценарий может все еще загрузиться даже то после тайм-аута, но по крайней мере что-то будет стрелять, если сервер будет недоступен.
Вы можете использовать setTimeout
и очистить его с помощью clearTimeout
в полном обработчике.
var reqTimeout = setTimeout(function()
{
alert("Request timed out.");
}, 5000);
var xhr = $.ajax({
type: "GET",
url: "http://localhost:3000/",
dataType: "script",
success: function() {
alert("success");
},
error: function() {
alert("error");
},
complete: function() {
clearTimeout(reqTimeout);
}
});
Если я правильно помню, jQuery выдает исключения. Таким образом, вы должны иметь возможность работать с try {...} catch () {...}
и обрабатывать его там.
в ie8, можно использовать:
success: function(data, textStatus, XMLHttpRequest) {
if("success"==textStatus&&XMLHttpRequest){
alert("success");
}else{
alert("server down");
}
}
, но он не может работать в chrome, firefox ... я пробовал
Вы можете использовать AjaxSetup от Jquery для обработки ошибок.
$.ajax({
type: "GET",
url: "http://localhost:3000/",
dataType: "script",
success: function () {
alert("success");
}, error: function () {
alert("error");
}
//AJAX SETUP "error"//
$.ajaxSetup({
"error": function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest + ' ' + textStatus + ' ' + errorThrown); //however you want
}
});
jQuery.ajax уже имеет тайм-аут
и должен вызвать ваш обработчик ошибок, если запрос задержится. Посмотрите фантастическую документацию, в которой говорится - я процитирую ее здесь, выделение мое:
timeoutNumber
Установите локальный таймаут (в миллисекундах) для запроса...
и:
error (XMLHttpRequest, textStatus, errorThrown) Function
Функция, которая будет вызвана в случае неудачи запроса. Функции передаются три аргумента: Объект XMLHttpRequest, строка, описывающая тип произошедшей ошибки, и необязательный объект исключения, если таковое имело место. Возможные значения второго аргумента (помимо null): "timeout", "error", "notmodified" и "parsererror". Это событие Ajax.