2009-05-15 2 views
3

Это кишка моего вызова ajax.JQuery неоднозначная ошибка ajax

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

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

Есть ли способ дифференцировать два?

Спасибо!

ответ

-1

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

1

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

+2

Это не будет отличать пользователя от навигации и полностью недоступного сервера. Я не думаю, что это работает. –

1

Вот это метод, который я использовал для реализации 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 
}); 
3

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

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 все обрабатывать его) так что это сломается, если вы заботитесь о более неясными браузеры.

Смежные вопросы