由于异步 .get jQuery 函数导致的表布局错误

Table layout error due to asynchronous .get jQuery function

本文关键字:函数 错误 表布局 jQuery get 于异步 异步      更新时间:2023-09-26

我正在尝试用数据库中每个单元格的不同信息填充时间表。表正在通过以下函数刷新:

function refreshTable() {
    //Form values
    var park = $('#Park').val();
    var building = $('#Building').val();
    var room = $('#Room').val().split(' ')[0];
    //var room = temp[0];
    var semester = $('#Semester').val();
    var week = $('#Week').val();

    //Days and times arrays
    var days = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"];
    var times = ["9:00-9:50", "10:00-10:50", "11:00-11:50", "12:00-12:50", "13:00-13:50", "14:00-14:50", "15:00-15:50",
                    "16:00-16:50", "17:00-17:50"];
    var periods = [1, 2, 3, 4, 5, 6, 7, 8, 9];
    //Initializing tableHTML variable
    var tableHTML = "<table><tr><th><p style='text-align: center'>-</p></th>";
    //Appending first row
    for (var i = 0; i < 9; i++) {
        tableHTML += "<th>" + times[i] + "</th>";
    }
    tableHTML += "</tr>";

    //Nested for loop to append timetable slots to tableHTML
    var period, day, result;
    for (var k = 0; k < 5; k++) {
        tableHTML += "<tr><th>" + days[k] + "</th>";
        day = days[k];
        for (var l = 0; l < 9; l++) {
            period = periods[l];
            $.get('@Url.Action("getAvailability")', { parkName: park, buildingName: building, roomCode: room,
                semester: semester, week: week, day: day, period: period
            }, function (data) {
                tableHTML += "<td>"+data+"</td>";
            });
        }
        tableHTML += "</tr>"
    }
    //Finish tableHTML and set #tableDIV to contain it.
    tableHTML += "</table>";
    $('#tableDiv').html(tableHTML);
}

但是,由于 jQuery get 函数异步调用它,因此只有 .get 之外的单元格才会写入 tableHTML 变量。

我能做些什么来防止这种情况发生?我不想使用 ajax 并关闭异步,因为它大大增加了加载页面的时间,但目前我看不到解决方法。

提前谢谢。

因为您正在进行异步调用,所以您需要一种机制将数据放回它所属的 DOM 中(而不是简单地连接它)。 因此,您需要将 k 和 l 传递到 get 命令中。 您可以放入内置 k 和 l 的占位符,例如

"< td id='my_td" + k + "_" + l + "'>" .

当 ajax 返回时,您可以将数据放在 DOM 中它所属的位置。