Déterminer si l'erreur $ .ajax est un délai d'attente

205

J'utilise la magie de jQuery.ajax( settings ).

Cependant, je me demande si quelqu'un a beaucoup joué avec le délai d'expiration?

Je sais que c'est essentiellement pour dicter l'heure locale d'une demande, mais peut-il déclencher quoi que ce soit si le délai est atteint? Ou s'arrête-t-il simplement d'écouter une réponse?

En lisant le site jQuery, je peux voir qu'il n'y a pas d'arguments passés, donc cela semble être un paramètre simple avec une capacité. Ce qui est bien.

Mais, je voudrais déclencher une alerte ou une fonction si le délai est atteint. Je peux voir que le paramètre d'erreur ne se déclenche pas, dans ce cas.

Voici mon extrait:

$("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); }
   });

});

Est-ce que quelqu'un sait comment travailler plus avec timeout?

coffeemonitor
la source

Réponses:

356

Si votre gestionnaire d'événements d'erreur prend les trois arguments (xmlhttprequest, textstatus et message) lorsqu'un délai d'expiration se produit, l'argument d'état sera «délai d'expiration».

Selon la documentation jQuery :

Les valeurs possibles pour le deuxième argument (outre null) sont "timeout", "error", "notmodified" et "parsererror".

Vous pouvez alors gérer votre erreur en conséquence.

J'ai créé ce violon qui le démontre.

$.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);
        }
    }
});​

Avec jsFiddle, vous pouvez tester les appels ajax - il attendra 2 secondes avant de répondre. J'ai mis le paramètre de délai d'attente à 1 seconde, il devrait donc sortir et renvoyer un état de texte de «délai d'attente» au gestionnaire d'erreurs.

J'espère que cela t'aides!

David Hoerster
la source
3
Heureux que cela ait fonctionné! Oui, ils cachent en quelque sorte ces valeurs de statut dans la documentation.
David Hoerster
102
Ils se cachent beaucoup dans la documentation.
Aaron
4
@JochemKuijpers Fiddler attendra 2 secondes, le délai de 1 seconde est donc respecté. Lire ....
Rickjaah
2
Pouvez-vous expliquer ce que sont les vars x, t, m?
bart
3
(x) mlhttprequest, (t) extstatus et (m) essage
JupiterP5