2009-10-12 7 views
1

Dans jQuery.ajax nous avons la bénédiction de définir un délai d'attente en millisecondes et un rappel d'erreur pour traiter ce délai.Faux déclenchements Timeout avec JavaScript/jQuery & AJAX

Cependant, certaines personnes sont simplement sur une connexion lente, avec une petite quantité de patience. Ce que je veux faire est simplement d'afficher un message indiquant "Cela prend plus de temps que d'habitude". L'argument Timeout dans jQuery ne le satisfera pas, et setTimeout() fait exactement la même chose. Comment cela pourrait-il être réalisé avec une simple vérification du temps?

Répondre

0

OK, c'était assez simple.

Tout ce que j'avais à faire était de configurer un Timout indépendant, avec une fonction à l'intérieur pour afficher tout message dont j'avais besoin.

Vous pouvez également conserver le rappel de délai/erreur pour des périodes prolongées vraiment longues.

var timeout = true; 

timeout = setTimeout(function() { 
    if (timeout) { 
     $("#zendesk-dropbox-error").html("Contacting the Helpdesk is taking longer than usual, try submitting manually?"); 
    } 
}, 9000); 


// Call for a JSON return from the PHP script 
$.ajax({ type: 'GET', url: http://www.example.com, dataType: 'json', cache: false, data: ({ a: 'b' }), timeout: 60000, 
    success: function(zendesk){ 
     timeout = false; 
     // Code 
    },error: function(objAJAXRequest, strError) { 
     // Code 
    } 
}); 
+0

Cela ne fonctionne que pour une demande de paiement ajax mais pas sur les téléphones intelligents où des demandes sont lentes et certains sont rapides ... Je pensais que vous voulez être plus précis que cela .. – jantimon

+0

C'est très bien, car il a gagné » t être disponible pour les téléphones intelligents - il fait partie d'une application beaucoup plus grande que Smart Phones ne pouvait pas gérer. C'est une requête AJAX modulaire et isolée qui sera la seule en cours d'exécution. – jakeisonline