【问题标题】:The loop iterate accurately according to length, but same record insert in each iteration循环根据长度准确迭代,但每次迭代都插入相同的记录
【发布时间】: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


【解决方案1】:

首先,我建议在第一个 ajax 响应中发送所有数据。如果可以由一个人完成,为什么还要进行这么多的 ajax 调用?

我认为您的范围界定有问题。你可以使用 $.each 来循环你的结果集。像这样:

$(document).ready(function () {
    $('#dayClosing').click(function () {
        $.post("RecallHoldTrx", {
            TrxHoldID: oData[0]
        }, function (data2) {
            $.each(data2,function(index,item) {
                $.post("GetItemDetail", {
                    itemCode: item
                }, function (data) {
                    oTable.fnAddData([data[0], data[1]]);
                });
            });
        });
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-04
    • 2019-09-22
    • 2011-08-16
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    相关资源
    最近更新 更多