JQuery неоднозначная ошибка AJAX - PullRequest
3 голосов
/ 15 мая 2009

Это интуиция моего вызова ajax.

function ajax(path, requestData, successCallBack, errorCallBack) {
    return $.ajax({
        error: function(xhr, textStatus, errorThrown) 
            ç(xhr, textStatus, errorThrown);
        },
        success: function(json){ 
            successCallBack(json);
        }
    });
}

Когда происходит вызов ajax и пользователь нажимает на ссылку на странице, вызывается мой errorCallBack. Если пользователь уйдет, вызов ajax будет прерван. При возникновении ошибки на сервере также вызывается мой обратный вызов errorCallBack.

Есть ли способ различить два?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 08 августа 2011

@ colbeerhey ответ хороший, но вы можете пойти еще дальше. Вам все еще нужно знать, действительно ли сервер недоступен. Я задал этот вопрос здесь , но полный ответ:

var running = true;
$(window).bind('beforeunload', function() { running = false; });

$.ajax({
    /* ajax options omitted */
    error: function (xmlHttpRequest, textStatus, errorThrown) {
         var serverNotReached = xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0;
         if(serverNotReached && !running) 
              return;  // it's not really an error, user clicked away
         else if (serverNotReached)
              // The server is down!  You didn't get any response at all.
         else
              // Do normal error handling
});

Имейте в виду, что onbeforeunload на самом деле является стандартом де-факто (IE FF, Webkit все это обрабатывают), так что это сломается, если вам нужны более незаметные браузеры.

1 голос
/ 15 мая 2009

У меня была та же проблема с чем-то, над чем я работал ... «Отмененный» запрос $ .ajax (пользователь перемещается прочь / останавливается) xhr.status == 0 вместо 200/404 / etc ...

1 голос
/ 13 августа 2009

Вот метод, который я использовал для реализации ответов gnarf и nickf:

jQuery генерирует событие ошибки, когда пользователь уходит со страницы, обновляя его, щелкая ссылку или изменяя URL-адрес в браузере. Вы можете обнаружить эти типы ошибок, реализовав обработчик ошибок для вызова ajax и проверив объект xmlHttpRequest:

$.ajax({
    /* ajax options omitted */
    error: function (xmlHttpRequest, textStatus, errorThrown) {
         if(xmlHttpRequest.readyState == 0 || xmlHttpRequest.status == 0) 
              return;  // it's not really an error
         else
              // Do normal error handling
});
0 голосов
/ 15 мая 2009

Проверьте свойства объекта xhr. В нем должен быть где-то код ответа HTTP.

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