2013-01-02 39 views
0

我正在forloop中執行幾個.post調用。 .post的返回數據將被附加到div容器。正在循環的數據被排序。我期待的後調用返回數據的順序與我發送的順序相同。但事實並非如此......。for循環中的POST沒有按照發送的順序返回

for(i = 0; i<data.length;i++){ 
    $.post('test.php',{variables},function(data1){ 
       $('#wrapper').append(data1); 
      }); 
} 

有沒有辦法讓.post以相同的順序返回?

+0

是否有可能將響應進入加HTML元素(例如'span' /'div')?如果是這樣,你可以在循環運行時創建這些元素,並且每個回調函數都會寫入適當的元素。 – Yoshi

回答

1

AJAX是異步的。

如果您希望按順序調用它們,則必須等待ajax調用完成,然後再調用下一個。


你可以嘗試把它變成一個queue

var $q = $({}); 

for(var i = 0; i < data.length; ++i) { 
    $q.queue(function(next){ 
     $.post('test.php',{variables},function(data1){ 
      $('#wrapper').append(data1); 
      next(); //call next fn 
     }); 
    }); 
} 
+0

這種效率高嗎?我是不是應該將這些.posts放在forloop中? –

+0

@AH隊列將在'next()'調用中一個接一個地運行。 – Neal

+0

好的謝謝。我會試試看。 –