我有到位被拆分大型查詢到管理的小塊,然後用一個簡單的AJAX方法吐出了這一點的工具。 AJAX表單的目的地只是一個將某些表單數據委託給函數的腳本,包括處理哪個「塊」。未能延時功能,直到後for循環已全面完成
<script>
var passes = Math.ceil($max/$offset);
for (i = 0; i < passes; i++)
{
$.ajax({
type: 'POST', url: 'do.php?p=' + i, data: $('#form" . $i . "').serialize(),
success: function(data){
$('#update" . $i . "').append(data);
}
});
}
</script>
,因爲這可以重複幾次,我一直在尋找爲執行循環何時腳本(即本身的功能)已完成。
由於這不是什麼太時髦,我認爲這將是添加if(i == passes -1) { alert('test');}if(i == passes -1) { alert('test');}
到循環的結束,像這樣的一個簡單的例子:
for (i = 0; i < passes; i++) {
$.ajax({
type: 'POST', url: 'do.php?p=' + i, data: $('#form" . $i . "').serialize(),
success: function(data){
$('#update" . $i . "').append(data);
}
});
if(i == passes -1) { alert('test');}
}
....但它加載這個作爲在頁面加載之前,在循環之前。
同樣,在之後添加一個簡單功能循環也獲得了相同的結果。
我本來以爲(但我在JS挺新鮮的),它會試圖執行的「i」的第二個實例之前完成一個循環,但它似乎並沒有這樣做 - 頁面的行爲像所有請求都會立即發送,完成循環,執行代碼,然後允許「成功」內的函數在自己的時間內回顯。這似乎更加明顯,因爲它有時會在第一次之前追加第二次迭代i
的結果。
問題...
1)因爲我已在我如何構成的循環,考慮到目的的錯誤?
2)爲什麼循環似乎在循環之後執行代碼時,它看起來像它仍然會在處理循環本身?
我試圖實現
每個循環應該執行MySQL查詢,回放功能的HTML輸出,然後移動到下一個前打印出來。它確實做到了99%正確,只是偶爾出現的問題並不總是按順序排列。
畢竟循環已經完成,並追加到容器中,我想運行一些代碼來確認操作完成。
許多在此先感謝,希望這是不夠清楚
看看:[爲什麼我的變量在函數內部修改後沒有改變? - 異步代碼引用](http://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) – Andreas
使用承諾。或者對於簡單的ajax,使用Callback。 –
您可以對函數使用遞歸調用,將其添加到$ .ajax的成功參數中。這會按照您希望的順序加載所有內容。 –