2010-08-10 7 views
0

J'ai un formulaire de recherche avec des valeurs par défaut. Lorsque l'utilisateur charge la page, onload appelle une fonction.Boucle de rupture de l'extérieur de la boucle

Cette fonction possède une boucle qui appelle une requête Ajax à chaque itération.

Je prends environ 20 à 30 secondes toutes les requêtes Ajax sont exécutées.

Au cours de ces itérations, l'utilisateur peut modifier les valeurs de formulaire et soumettre le formulaire avant que ces itérations soient terminées.

Existe-t-il un moyen de rompre cette boucle lorsque l'utilisateur clique sur le bouton Soumettre?

Merci.

+0

20 à 30 secondes? semble assez long pour un appel AJAX ... – scunliffe

+0

Si les requêtes AJAX sont effectuées de manière asynchrone (comme elles le feront probablement, d'où _A_JAX) les requêtes sont lancées assez rapidement les unes après les autres. Cela peut prendre environ 30 secondes, mais les demandes sont déjà envoyées. –

Répondre

1

Trier, avant que chaque requête ajax ne soit appelée, de vérifier si un indicateur existe. Supposons par exemple qu'il puisse être initialisé au chargement de la page en tant que CARRY_ON = true;

Maintenant, lorsque le bouton d'envoi est appuyé, changez l'indicateur à false. Alors tout ajax futur demandé sera arrêté.

3

Si le formulaire est publié, la page sera déchargée. Toutes les demandes en attente seront supprimées (bien que le serveur continuera de traiter toutes les demandes déjà vues, cela ne peut pas aider). Si la publication est également effectuée via AJAX, vous pouvez utiliser une variable de garde et la définir avant de soumettre le fichier et le vérifier avant d'envoyer une demande de mise à jour.

Je vais supposer que vous voulez faire des mises à jour périodiques jusqu'à ce que le formulaire soit soumis - une boucle n'est pas vraiment la façon idéale de gérer cela. L'exemple ci-dessous utilise setTimeout pour interroger le serveur toutes les secondes - tant que le formulaire n'a pas déjà été soumis.

var submitted = false; 
var timer = null; 
$('.submit-button').click(function() { 
    submitted = true; 
    if (timer) clearTimeout(timer); 
    $('form').submit(); 
    return false; 
}); 

function doUpdate() 
{ 
    if (!submitted) { 
     $.ajax({ 
      ... 
     }); 
     timer = setTimeout(doUpdate,1000); 
    } 
} 

doUpdate(); 
1

Lorsque vous soumettez le formulaire, automatiquement l'exécution côté client sera terminée.

Si vous soumettez en utilisant Ajax, vous pouvez conserver un drapeau (variable globale) pour arrêter la boucle.