Sprawdź, czy błąd $ .ajax przekroczył limit czasu

205

Korzystam z magii jQuery.ajax( settings ).

Zastanawiam się jednak, czy ktoś dużo grał z ustawionym limitem czasu?

Wiem, że jest to po prostu podyktowanie czasu lokalnego dla żądania, ale czy może coś uruchomić, jeśli limit czasu zostanie przekroczony? Czy po prostu przestaje nasłuchiwać odpowiedzi?

Czytając stronę jQuery, widzę, że nie przekazano żadnych argumentów, więc wydaje się, że jest to proste ustawienie z jedną funkcją. Co jest w porządku

Ale chciałbym uruchomić alarm lub jakąś funkcję, jeśli upłynie limit czasu. W tym przypadku widzę, że ustawienie błędu nie jest uruchamiane.

Oto mój fragment:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

Czy ktoś wie, jak lepiej pracować z limitem czasu?

coffeemonitor
źródło

Odpowiedzi:

356

Jeśli program obsługi zdarzenia błędu pobierze trzy argumenty (xmlhttprequest, status tekstowy i komunikat), gdy nastąpi przekroczenie limitu czasu, argumentem stanu będzie „limit czasu”.

Zgodnie z dokumentacją jQuery :

Możliwe wartości dla drugiego argumentu (oprócz null) to „limit czasu”, „błąd”, „niezmodyfikowany” i „parsererror”.

Wtedy możesz odpowiednio obsłużyć swój błąd.

Stworzyłem to skrzypce, które to pokazuje.

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

Za pomocą jsFiddle możesz testować wywołania ajax - odczeka 2 sekundy zanim odpowie. Ustawiam limit czasu na 1 sekundę, więc powinien on wyskoczyć i przekazać do programu obsługi błędów status tekstowy „limit czasu”.

Mam nadzieję że to pomoże!

David Hoerster
źródło
3
Cieszę się, że to zadziałało! Tak, w pewnym sensie ukrywają te wartości statusu w dokumentacji.
David Hoerster,
102
Dużo chowają się w dokumentacji.
Aaron
4
@JochemKuijpers Fiddler poczeka 2 sekundy, więc limit 1 sekundy zostanie przekroczony. Przeczytaj ....
Rickjaah,
2
Czy potrafisz wyjaśnić, czym są zmienne x, t, m?
bart,
3
(x) mlhttprequest, (t) extstatus oraz (m)
eessage