199 votes

Déterminez si $.ajax erreur un timeout

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

Cependant, je me demandais si quelqu'un a joué avec le paramètre de délai d'attente?

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

La lecture de l'jQuery site, je peux voir il n'y a pas de passage d'arguments, de sorte qu'il ressemble à une simple mise avec une capacité de. Ce qui est bien.

Mais, je tiens à déclencher une alerte ou d'une fonction, si le délai est atteint. Je vois que l'erreur de réglage de ne pas se déclencher, 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); }
   });

});

Personne ne sait comment travailler plus avec délai d'attente?

348voto

David Hoerster Points 18815

Si votre gestionnaire d'événement d'erreur prend trois arguments (xmlhttprequest, textstatus, et message) lorsqu'un délai d'attente se produit, l'état arg sera 'timeout'.

Par le jQuery documentation:

Les valeurs possibles pour le deuxième argument (d'ailleurs null) sont "timeout", "erreur", "notmodified" et "parsererror".

Vous pouvez gérer votre erreur par conséquent puis.

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(x, t, m) {
        if(t==="timeout") {
            alert("got timeout");
        } else {
            alert(t);
        }
    }
});​

Avec jsFiddle, vous pouvez tester les appels ajax -- il faudra attendre 2 secondes avant de répondre. J'ai mis le paramètre de délai d'attente à 1 seconde, de sorte qu'il devrait l'erreur et passer à un textstatus de "timeout" pour le gestionnaire d'erreur.

Espérons que cette aide!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X