Вызов "ajax" в jQuery запускает функцию "успех", даже если сервер не отвечает - PullRequest
3 голосов
/ 19 октября 2010

Похоже, что функция jQuery .ajax запускает функцию 'success', даже когда она не получает ответа от сервера. Я бы посчитал это ошибкой. Я обнаружил это событие, проверив, есть ли 'request.status===0', есть ли какие-либо другие случаи, которые я должен проверить, где функция 'success' будет запущена, даже если возникла ошибка?

Я разместил код, который я использую сейчас ниже. Как обычно обрабатывается ситуация такого типа?

$.ajax({ 
    async : true, cache : false, dataType : 'json',
    type : 'POST',
    url : 'person/' + personKey,
    data : JSON.stringify({firstName:'Jilopi',}),

    success : function(data, textStatus, request){
        if( request.status === 0 ){
            alert('Error: problem saving person - no response');
        }else{
            alert('Success: saved person');
        }
    },
    error : function(request, textStatus, errorThrown){
        alert('Error: problem saving person');
    },
});

Ответы [ 2 ]

8 голосов
/ 19 октября 2010

Вы определили единственную проблему "ложного успеха", о которой я знаю. Чтобы уточнить это немного: это был обходной путь для Opera (который возвращает на самом деле a 304 как 0), вы можете увидеть комментарий в 1.4 .2 (и предыдущие версии) здесь: http://github.com/jquery/jquery/blob/1.4.2/src/ajax.js#L551

Однако, он был удален в jQuery 1.4.3 из-за вашей точной проблемы , вы можете увидеть изменение, которое сделало это здесь .

Краткий ответ: обновление до jQuery 1.4.3 + для решения вашей проблемы, и вы можете отменить чек status === 0.

0 голосов
/ 15 сентября 2014

Мне также нужно было показать, подключен ли ES-сервер к сети или нет! Мое решение в словах:

Я использовал длинные опросы, чтобы проверить состояние моего сервера! И ES уже есть REST API Позвоните, чтобы получить информацию о ES-сервере!

Это запрос здоровья кластера!

Подробнее о запросах о состоянии кластера ES читайте здесь!

Просто введите следующее в свой веб-браузер и посмотрите ответ о своем ES-сервере!

http://your-server-url:9200/_cluster/health

Фрагмент простой рекурсивной функции длинного опроса jQuery:

(function poll(){
health_url = "http://your-server-url:9200/_cluster/health";
online_ajax = false;
setTimeout(function(){
    $.ajax({
     url: health_url,
     dataType: "json",
     success: function(data){
            if (data.status == 'yellow') {
                // Show Server-Online Status Message in your App
            } else {
                // Show Server-Offline Status Message in your App
            };
            //Setup the next poll recursively
            poll();
          }
      })
      .fail(function(){
            // Show Server-Offline Status Message in your App
      });
}, online_status_time_out);
})();

Надеюсь, этот ответ будет полезен всем!

Ура !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...