web-dev-qa-db-fra.com

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

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

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

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

En lisant le site jQuery, je constate qu’aucun argument n’est passé, ce qui semble être un simple paramètre avec une seule capacité. Ce qui va bien.

Mais, j'aimerais 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?

194
coffeemonitor

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

Selon le documentation jQuery :

Les valeurs possibles pour le deuxième argument (outre null) sont "timeout", "erreur", "non modifié" 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 faudra attendre 2 secondes avant de répondre. Je mets le paramètre de délai d'attente à 1 seconde, il devrait donc être erroné et renvoyer un statut textuel de "délai d'attente" au gestionnaire d'erreurs.

J'espère que cela t'aides!

343
David Hoerster