【发布时间】:2012-06-25 09:37:35
【问题描述】:
我正在使用 Datatables.net 和 Java servlet:
$(document).ready(function () {
$('#dayClosing').click(function () {
$.post("RecallHoldTrx", {
TrxHoldID: oData[0]
}, function (data2) {
for (k = 0; k < data2.length; k++) {
var getItemCode = data2[k];
$.post("GetItemDetail", {
itemCode: getItemCode
}, function (data) {
oTable.fnAddData([data[0], data[1]]);
});
}
});
});
});
循环根据它的长度准确地迭代,但每次迭代都插入相同的记录;但是
当我把alert() 放在var getItemCode = data2[k]; 之后
var getItemCode = data2[k];
alert(getItemCode);
当我按下确定,确定时,每次迭代都会准确地在数据表中插入新行。但是当我删除警报时,每次迭代中都会插入相同的记录,它有时是第一条记录,有时是最后一条记录。
我们如何在没有警报的情况下插入包含新数据的行?
注意:oTable.fnAddData() 用于在Datatables.net 中添加行
【问题讨论】:
-
嗨,你能不能试试 jsfiddle 这个,我也许可以帮助你,
:) -
试试
alert,而不是console.log(getItemCode)。同样在调用oTable.fnAddData之前,添加console.log(data[0]); console.log(data[1]);这样您将在浏览器的调试控制台中看到您正在执行的操作的痕迹,但它仍会全速运行。 (很可能当您使用警报时,这会造成隐藏问题的延迟。) -
@DanielEarwicker 是否可以在不执行循环中的所有任务甚至数据库通信的情况下使该循环进行第二次迭代?我正在使用 Jquery。
-
是的。循环的每次迭代都说
$.post("GetItemDetail", ...,它只开始与服务器的事务。它不会等待它完成。但这本身对您的代码来说应该不是问题,因为您只依赖于来自服务器的响应data。通过输入您自己的日志,您可以查看问题出在您的代码中还是其他地方(在fnAddData或服务器中) -
是的。 @DanielEarwicker 你是对的,它不会等待它完成。在您看来,解决方案或替代解决方案是什么?
标签: javascript jquery servlets for-loop