【发布时间】:2011-06-01 01:16:54
【问题描述】:
我确定我以前见过这个并且知道答案,但 12 小时后......我的脑子完全糊涂了。
我有一个 for 循环,我在其中尝试连接到一个字符串,以便在完成字符串(从而完成一个漂亮的小表格)之后,我希望插入到我的 html 中并显示给用户。
但是,我的函数末尾的东西(在我的 for 循环之后)在 for 循环之前被调用......
function getEntries() {
$('#entryTotalsDiv').html('<img src="images/ajax-loader.gif" /> ... retrieving form totals.');
var entryTotalsTable = "<table id='entryTable' class='display' style='border:1px;'><thead><tr><th>Form Name</th><th>Hash</th><th>Entries</th></tr></thead>" +
"<tbody>"
//Get rows ONE at a time.
var countNumber = 1;
for (var frm = 0; frm < numberOfForms; frm++) {
$.post('ajax/getEntries.aspx',
{
'formNumber': frm
},
function (data) {
entryTotalsTable += "<tr><td>" + data[0].formName + "</td><td>" + data[0].formHash + "</td><td>" + data[0].formEntryCount + "</td></tr>";
//Now go and update the Form Retrieval div -- add 1 to the frm Number
$('#formNamesDiv').html(countNumber + ' of ' + numberOfForms + ' retrieved.');
countNumber++;
});
}
entryTotalsTable += "</tbody></table>";
$('#entriesDiv').html(entryTotalsTable);
//Now bind the table to the DataTables JQ script
$('#entryTable').dataTable();
$('#entryTable').show('slow');
}
如果您注意到,我想在最后关闭 Table html,但是在我的 for 循环完成之前调用它,从而搞砸了我的字符串...
?
entryTotalsTable += "</tbody></table>";
$('#entriesDiv').html(entryTotalsTable);
//Now bind the table to the DataTables JQ script
$('#entryTable').dataTable();
$('#entryTable').show('slow');
}
【问题讨论】:
-
您正在循环内发出 Ajax 请求。 Ajax 是异步的,因此循环之后的代码在 Ajax 回调执行之前执行。
-
numberOfForms 在哪里定义?还是我的脑子也糊涂了??
-
@Felix:这应该是一个答案。 :)
-
另一个注意事项:我认为你甚至不能依赖回调按循环顺序调用的事实。来自较早查询的响应可能比来自较晚查询的响应更早收到。
-
@cHao:Imo 一个答案将解决问题....这只是解释 为什么它不起作用....我累了 ;)
标签: javascript loops for-loop