2010-08-22 7 views
186

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

Cependant, je me demande si quelqu'un a beaucoup joué avec le réglage du délai d'attente?

Je sais que c'est essentiellement pour dicter l'heure locale d'une requête, mais peut-elle déclencher quelque chose si le délai d'attente est atteint? Ou 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 ressemble à un simple paramètre avec une seule capacité. Ce qui est bien. Mais, je voudrais déclencher une alerte ou une fonction si le délai d'expiration 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 délai d'attente?

Répondre

325

Si votre gestionnaire d'événements d'erreur prend les 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 second argument (en plus de null) sont "délai d'attente", "erreur", "notmodified" et "parsererror".

Vous pouvez gérer votre erreur en conséquence alors. J'ai créé ce fiddle qui démontre cela.

$.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. Je mets le paramètre de délai d'attente à 1 seconde, donc il devrait commettre une erreur et renvoyer un texte de 'timeout' au gestionnaire d'erreurs.

Espérons que cela aide!

+2

Heureux que cela a fonctionné! Oui, ils cachent ces valeurs d'état dans la documentation. –

+93

Ils cachent beaucoup dans la documentation. – Aaron

+0

Pourquoi 2 secondes? Votre exemple montre clairement 1000 (ms) –

Questions connexes