【发布时间】:2022-08-14 13:17:51
【问题描述】:
我有一个 ajax 调用来获取学生的出勤率。它被填充到名为 \'#tableAttendance\' 的表中。执行时,我将显示一个模式(如弹出进度窗口)以显示进度加载进度(加载 100 个中的 1 个)。在 for 循环中,我需要更新一个名为 \"#LoadingRecord\" 的标签,其中包含每轮加载的记录数。在我的代码中,标签只会在执行 for 循环后更新,即使标签更新代码在循环内(可能是线程阻塞)。我怎样才能接近这个功能?
有没有办法至少将 for 循环暂停 1 毫秒以更新标签(\'loading 2 of 100\')并继续下一轮循环?
应该能够在标签中显示循环的当前位置喜欢进度条
在第一轮\'加载 1 of 100\',
在第二轮\'加载 2 of 100\',
在第三轮\'加载 3 of 100\'
但是在控制台上实时显示循环
\'正在加载 100 个中的 1 个\'
\'正在加载 2 个,共 100 个\'
\'正在加载 3 个,共 100 个\'
.....................
\'加载 100 个中的 100 个\'
我的模态:
<div class=\"modal\" tabindex=\"-1\" role=\"dialog\" aria-hidden=\"true\">
<div class=\"modal-dialog\" style=\"width:auto;\">
<div class=\"modal-content\">
<div class=\"modal-body\" style=\"margin-top: -25px;\">
<label id=\"LoadingRecord\"></label>
</div>
</div>
</div>
</div>
我的代码:
$.ajax({
url: $(\"#GetAttendance\").val(),
type: \"POST\",
dataType: \"JSON\",
data: { StudentID: $(\"#StudentID\").val()},
success: function (result) {
for (var i = 0; i < result.length; i++) {
console.log(\"loading \" + (i+1) + \" of \" + result.length));
window.requestAnimationFrame(()=> $(\"#LoadingRecord\").text(\"loading \" + (i+1) + \" of \" + result.length)); //this label should be updated each round, but it does not
var row = $(\'#tableAttendance tbody>tr:last\').clone(true);
row.find(\'label[name=\"Date\"]\').val(result[i].Date);
row.find(\'label[name=\"Presence\"]\').val(result[i].AbsentOrPresent);
row.insertAfter(\'#tableAttendance tbody>tr:last\');
}
}
});
-
欢迎来到堆栈溢出。最有可能的是,您有多个标签并且调用
$(\"#Label\")可能会产生多个结果。请提供一个最小的、可重现的示例:stackoverflow.com/help/minimal-reproducible-example -
@Twisty 更新了问题。
-
更新不显示任何新的细节。请提供更完整的示例。
-
@Twisty 我也添加了模态
-
由于只有一个标签,您希望如何附加结果?
标签: javascript jquery for-loop jquery-ui