2009-12-23 92 views
0

我有問題,我有一些jQuery代碼。jQuery:控制事件的順序

使用$ .each我循環了幾個值並調用一些php代碼。在這個$ .each循環完成後,我想加載一個包含特定內容的div。我曾嘗試在$ .each語句後加載div,但加載語句仍然是先執行,顯示錯誤的值。當我把這個負載放在$ .each裏面的時候,雖然它在每次迭代之後加載,而不是在最後加載。有任何想法嗎?

下面是相關的部分我的代碼:

$.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" 
    }); 

回答

1

獲取的steps數量。然後,執行$("#clock").load("utility.php" ...第二回調內部的循環只有在當前指數相同的步數 - 1。事情是這樣的:

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

衛生署!這很有道理,謝謝。雖然我仍然想知道爲什麼這些函數不是以線性順序執行的? – Domenic

+0

它們是按順序處理的,問題是你所做的請求是異步的,這意味着它們被啓動,當所有的數據返回時,調用回調函數。與此同時,其餘的代碼被執行。 – Seb

+0

這是爲了避免鎖定整個JS引擎,讓用戶獲得更流暢的UI體驗:) – Seb