【发布时间】:2012-11-12 06:59:57
【问题描述】:
我正在填充一个包含大约 500 行的表,这需要浏览器几秒钟的时间来呈现,而它看起来是冻结的。这就是为什么我要显示一条请求用户耐心的消息:
$.ajax({
url: '{{ search_url }}',
success: function (response) {
$('#progress').text('Rendering results, please wait...');
clear_table();
populate_table(response);
}
});
消息未显示 - 显然浏览器(在 Chrome 23 中测试)缓冲了所有 DOM 更改并一次性渲染它们。
作为一种解决方法,我发现当我延迟填充表格直到执行返回到事件循环时,实际显示的消息:
$.ajax({
url: '{{ search_url }}',
success: function (response) {
$('#progress').text('Rendering results, please wait...');
window.setTimeout(function () {
clear_table();
populate_table(response);
}, 0);
}
});
我想知道这种方法是否总是有效,或者这种情况下是否有更好的技术。
【问题讨论】:
-
消息应该在ajax调用开始之前触发,而不是在成功回调中
-
是的,您的
setTimeout将是合适的解决方案,并且它始终有效。 -
...也许还可以提高
populate_table的性能。 500 行并不算多,因此处理起来似乎不会花费太长时间。 -
是的,我也觉得有点奇怪。嗯,它是 jQuery 并且涉及列宽调整,但我会看看我是否可以组合一个独立的测试用例。
标签: javascript jquery google-chrome browser