带有ajax调用的Javascript循环

时间:2017-04-03 18:15:59

标签: javascript ajax

我整个下午一直在努力学习如何完成这项工作,希望有人可以提供帮助。我有一个简单的要求,即运行已检查的复选框列表,从服务器检索一些数据,用数据填充元素展开它。到目前为止,我有以下代码;

function opentickedrows() {
    $('input[type=checkbox]').each(function () {
        if (this.checked) {
            tid = $(this).attr('name').replace("t_", "");
            $.ajax({
                url: '/transfer_list_details_pull.php?id=' + tid,
                type: 'GET',
                success: function (data) {
                    $('#r' + tid).html(data);
                    $("#r" + tid).show();
                    $("#box" + tid).addClass("row-details-open");
                }
            });
        }
    });
}

我遇到的问题是,ajax调用所有似乎都发生得如此之快以至于' tid'没有在ajax调用中更新。从我所看到的内容来看,我相信我需要将其包含在一些带回调的函数中,但我无法理解如何。如果有人能让我走上正确的道路,我真的很感激。

1 个答案:

答案 0 :(得分:2)

Ajax调用是异步的,因此在调用成功回调时,tid具有$('input[type=checkbox]')的最后一项的值。

您可以使用闭包:

function opentickedrows() {
    $('input[type=checkbox]').each(function () {
        if (this.checked) {
            tid = $(this).attr('name').replace("t_", "");
            (function(tid) {
                $.ajax({
                    url: '/transfer_list_details_pull.php?id=' + tid,
                    type: 'GET',
                    success: function (data) {
                        $('#r' + tid).html(data);
                        $("#r" + tid).show();
                        $("#box" + tid).addClass("row-details-open");
                    }
                });
            })(tid)
        }
    });
}