Проверьте состояние jQuery ajax запрос

Кажется, что успех, ошибка и полные обратные вызовы только стреляют, когда запрос 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, которого я избежал бы. Таким образом, я обосновался на создании ручного тайм-аута, как предложено ниже. Вы не можете прервать запрос, если он испытает таймаут, что означает, что сценарий может все еще загрузиться даже то после тайм-аута, но по крайней мере что-то будет стрелять, если сервер будет недоступен.

9
задан Seth Archer Brown 2 July 2010 в 17:13
поделиться

5 ответов

Вы можете использовать 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);
  }
});
8
ответ дан 4 December 2019 в 14:26
поделиться

Если я правильно помню, jQuery выдает исключения. Таким образом, вы должны иметь возможность работать с try {...} catch () {...} и обрабатывать его там.

0
ответ дан 4 December 2019 в 14:26
поделиться

в ie8, можно использовать:

  success: function(data, textStatus, XMLHttpRequest) {
    if("success"==textStatus&&XMLHttpRequest){
        alert("success");
    }else{
        alert("server down");
    }
  }

, но он не может работать в chrome, firefox ... я пробовал

-1
ответ дан 4 December 2019 в 14:26
поделиться

Вы можете использовать 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
        }
    });
0
ответ дан 4 December 2019 в 14:26
поделиться

jQuery.ajax уже имеет тайм-аут и должен вызвать ваш обработчик ошибок, если запрос задержится. Посмотрите фантастическую документацию, в которой говорится - я процитирую ее здесь, выделение мое:

timeoutNumber

Установите локальный таймаут (в миллисекундах) для запроса...

и:

error (XMLHttpRequest, textStatus, errorThrown) Function

Функция, которая будет вызвана в случае неудачи запроса. Функции передаются три аргумента: Объект XMLHttpRequest, строка, описывающая тип произошедшей ошибки, и необязательный объект исключения, если таковое имело место. Возможные значения второго аргумента (помимо null): "timeout", "error", "notmodified" и "parsererror". Это событие Ajax.

5
ответ дан 4 December 2019 в 14:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: