2009-12-23 8 views
0

J'ai des problèmes avec le code jQuery que j'ai. En utilisant $ .each, je parcourt quelques valeurs et appelle un code php. Après que cette boucle $ .each est terminée, je voudrais charger un div avec un certain contenu. J'ai essayé de charger la div après l'instruction $ .each, mais l'instruction load est toujours exécutée en premier, affichant la mauvaise valeur. Quand je mets cette charge dans le $. $ Cela fonctionne, bien qu'il charge après chaque itération au lieu de à la fin. Des idées?jQuery: Contrôle de l'ordre des événements

Voici la partie pertinente mon code:

$.each(steps, function(n,step){ 
      $.post("utility.php", { 
       utility: "getStepValue", 
       step: step 
      }, 
      function(data) { 
       // offset clock 
       var step_value = data; 
       $.post("utility.php", { 
        utility: "offsetClock", 
        step_value: step_value 
       }, 
       function(data){ 
        // when load statement inserted here, it works fine 
       }); 
      }); 
     } 
    }); 

    // this statement finishes before the $.each, showing the wrong value 
    $("#clock").load("utility.php", { 
     utility: "displayClock" 
    }); 

Répondre

1

Obtenez le nombre de steps. Ensuite, faites $("#clock").load("utility.php" ... l'intérieur du deuxième rappel dans la boucle que si l'indice actuel est le même que le nombre d'étapes - 1. Quelque chose comme ceci:

var count = steps.length; 
$.each(steps, function(n,step){ 
      $.post("utility.php", { 
       utility: "getStepValue", 
       step: step 
      }, 
      function(data) { 
       // offset clock 
       var step_value = data; 
       $.post("utility.php", { 
        utility: "offsetClock", 
        step_value: step_value 
       }, 
       function(data){ 
        if(n == count - 1){ 
        $("#clock").load("utility.php", { 
         utility: "displayClock" 
        }); 
        } 
       }); 
      }); 
     } 
    }); 
+0

Doh! Cela a du sens, merci. Bien que je me demande encore pourquoi ces fonctions ne sont pas effectuées dans un ordre linéaire? – Domenic

+0

Elles sont traitées dans l'ordre, le problème est que les requêtes que vous faites sont asynchrones, ce qui signifie qu'elles sont démarrées et, lorsque toutes les données sont renvoyées, la fonction de rappel est appelée. En attendant, le reste du code est exécuté. – Seb

+0

C'est pour éviter de bloquer tout le moteur JS, donc l'utilisateur obtient une expérience d'interface utilisateur plus lisse :) – Seb

Questions connexes