2016-08-04 18 views
6

Jak podano w tytule, chciałbym wiedzieć, co dzieje się, gdy żądanie AJAX jest wysyłane do akcji kontrolera iw tym czasie, przekroczenie limitu czasu sieci następuje przez kilka ms, zanim żądanie zostanie zakończone.Co się stanie, gdy wystąpi limit czasu żądania sieci podczas żądania AJAX do akcji ASP.NET MVC

Reply from <Server IP>: bytes=32 time=31ms TTL=122 
Request timed out 
Reply from <Server IP>: bytes=32 time=28ms TTL=122 

Biorąc pod uwagę limit czasu zdarza się tylko przez kilka ms, jakie skutki miałoby to na moją prośbę AJAX?

Jest to kontynuacja problemu, przed którym stoimy w naszej aplikacji, jak wyjaśniono w tym SO question i chciałbym wiedzieć, czy są one w jakiś sposób powiązane.

Mam wyszukiwane hasła w podobnych sprawach, ale nie mogłem znaleźć niczego przydatnego.

Edycja: Czy oprócz wpływu na AJAX miałoby to wpływ na zachowanie metody działania (serwer)?

Odpowiedz

3

Żądanie "nie powiedzie się", co oznacza, że ​​wejdzie ono w stan onError Twojego żądania AJAX. Kod statusu będzie wówczas wynosił 0, ponieważ nie ma odpowiedzi od serwera w celu ustalenia rzeczywistego kodu statusu (np. 200 OK lub 500 Wewnętrzny błąd serwera).

6

Bez względu na to, czy limit czasu ma miejsce tylko przez kilka ms lub więcej, żądanie zakończy się niepowodzeniem. Funkcja oddzwaniania success twojego żądania AJAX nie zostanie wykonana, a żądanie zakończy się wykonaniem funkcji zwrotnej complete. Domyślnie wszystkie żądania AJAX mają limit czasu wynoszący 0ms (bez ograniczeń), ale domyślnie przekroczą limit czasu przeglądarki.

Gdy upłynie limit czasu żądania AJAX, funkcja wywołania zwrotnego error zostanie wywołana. Drugim argumentem tej funkcji jest ciąg opisujący typ błędu, który w tym przypadku będzie miał wartość timeout. można obsługiwać żądania limity czasu przez obsługę tej funkcji zwrotnej i ewentualnie określenie wartości limitu czasu (jeśli nie podano, działa od wartości domyślnej) na żądanie ciała AJAX:

$.ajax({ 
    ... 
    timeout: 5000, //specify the timeout value in milliseconds 
    error: function(jqXHR, textStatus, errorThrown) { 
     if(textStatus==="timeout") { 
      //code to execute when timeout occurs 
     } 
    } 
});​ 

Dodatkowo, można również sprawdzić, czy wniosek upłynął limit czasu w funkcji oddzwaniania complete (w sposób podobny do pokazanego powyżej) poprzez sprawdzenie drugiego argumentu, który jest łańcuchem znaków, i będzie miał wartość timeout, jeśli żądanie zostało przekroczone.

również pamiętać, to:

Zliczanie czasu rozpoczyna się w momencie $ .ajax połączenie jest wykonane; jeśli kilka innych żądań jest w toku, a przeglądarka nie ma dostępnych połączeń, możliwe jest, że żądanie upłynie, zanim będzie można je wysłać.

Limity czasu żądania są zwykle albo domyślnie ustawiane, albo ustawiane jako globalna wartość domyślna za pomocą $ .ajaxSetup(), a nie nadpisywane dla konkretnych żądań z opcją limitu czasu.

Sugerowałbym użycie alternatywnego HTTP/s narzędzie do monitorowania ruchu jak fiddler odnaleźć tajemnicę drugiego wniosku.

Więcej informacji: jQuery ajax documentation

+0

dzięki za twoją wyszukaną odpowiedź. Jeśli chodzi o sugestie dotyczące monitorowania ruchu, karta fiddler/chrome network pokazuje tylko jedno żądanie od klienta. –

0

W przypadku time-out sukces zwrotna przyzwyczajenie wykonać tak trzeba napisać zwrotnego błędu po stronie klienta do obsługi takich problemów.

Musisz podnieść wyjątek ze strony serwera w przypadku przekroczenia limitu czasu, aby powrócił do klienta jako błąd, który jest jedynym sposobem, w jaki można obsłużyć przerwę.

Powiązane problemy