【发布时间】:2011-01-13 07:25:38
【问题描述】:
我有一个长期运行的报告,并希望在生成时向用户显示等待微调器。我已经完成了这项工作,但不确定我做得最好还是正确。
这是使用 ColdFusion,但我猜它可能是任何语言。在页面顶部,我有一些显示等待微调器的 Javascript (jQuery),还有一个 documentReady 处理程序,我在其中将微调器取下来。我刷新输出(如果重要),然后其余代码处理报告内容。这从来没有渲染微调器,我推测,即使我正在刷新服务器上的东西,也会发生一些缓冲,并且浏览器直到为时已晚才看到微调器代码。所以,我在刷新之前添加了一个循环,吐出几百行 HTML cmets。在微调了行数之后,就成功了。我当时认为其他网站也是如此。
但是:今天,当我看到我的另一个页面逐行吐出一个长时间运行的作业的状态时,我突然想到,该页面在每一行之后都会刷新,并且浏览器会根据需要逐步呈现。这与我上面的结论不符,现在我不知道规则是什么。有没有可预测的方法来做到这一点?是否因浏览器而异?
澄清:我很欣赏试图解释执行等待微调器的正确方法的答案,但我只是使用等待微调器作为示例来说明我的真正问题:是否有可靠的方法来预测浏览器何时会开始渲染 HTML,因为它通过网络流式传输给他们?通过观察很明显,浏览器不会等待 /html 标签开始工作。这个问题不一定与Javascript有关。例如,我描述的显示状态的第二个页面是纯 HTML。
【问题讨论】:
-
如果我理解正确,您是在文档就绪事件触发之前使用 jQuery 将微调器加载到 DOM 中?我不知道这是否与您的问题有关,但这不是您想要做的。这是您正在进行的ajax调用吗?听起来您正在尝试执行类似 AJAX 的功能(使用等待指示器加载 DOM,进行 AJAX 调用以加载报告,在加载时将等待指示器替换为报告),但不使用 AJAX。
-
没有 AJAX 调用。有简单的内联 jQuery 来显示微调器。该页面的其余部分是实际的报告数据。这工作正常。为什么这不是我想做的?如果我可以让它工作,那么将页面分成两部分似乎要简单得多 - 初始位加上通过 AJAX 返回的报告。
标签: jquery html browser spinner flush