Dav*_*rns 7 html browser jquery flush spinner
我有一个长期运行的报告,并希望在生成时向用户显示等待微调器.我已经完成了这项工作,但我不确定我是以最好还是正确的方式做到这一点.
这是使用ColdFusion,但它可以是我猜的任何语言.在页面的顶部,我有一些Javascript(jQuery),它显示了一个等待微调器,还有一个documentReady处理程序,我将spinner放下.我刷新输出(如果重要),然后其余代码适用于报告内容.这并不是渲染微调器,我理论上说,即使我在服务器上冲洗东西,一些缓冲也在发生,浏览器从来没有看过微调器代码,直到为时已晚.所以,在我刷新数百行HTML注释之前,我添加了一个循环.在微调线条数量之后,就可以了.我当时认为其他网站也是这样做的.
但是:今天,在观看我的另一个页面时,一个长线作业的逐行状态,我突然想到该页面在每一行之后刷新,浏览器会根据需要逐步呈现.这与我上面的结论不符,现在我不知道规则是什么.有可预测的方法吗?它是否因浏览器而异?
澄清:我很欣赏那些尝试解释等待微调器的正确方法的答案,但我只是用一个等待微调器作为例子来说明我的真实问题:是否有可靠的方法来预测浏览器何时开始渲染HTML是通过网络流式传输给他们的吗?通过观察显而易见,浏览器不会等待/ html标记开始工作.这个问题不一定与Javascript有任何关系.例如,我描述的显示状态的第二页是纯HTML.
--- 澄清后回答 ---
我原来的答案应该对某人有用(我希望),但这不是对问题的直接回答,所以我会发布另一个答案
您重述的问题的答案是“否”。在FF的情况下,有一个预定义的初始渲染延迟,但其他浏览器会有所不同。FF 渲染延迟也可以调整。
以 FF 为例,最初的 250 毫秒是 FF在尝试第一次渲染之前至少找出一些有用信息的时间。然后,当它了解更多信息时,它会定期进行额外的渲染。
您无法确定浏览器何时开始呈现 HTML 文档。
--- 原答案 ---
为了直接回答你的问题,我相信 Firefox 在处理收到的第一个数据之前会等待 250 毫秒,但这可以改变。至于其他浏览器,我不知道。
但是,您不想走那条路。
当 jQuery 准备好发挥其魔力时,它会通过 fire 通知您$(document).ready()。在此之前,任何使用 jQuery 的尝试都将失败。换句话说,您的微调器没有显示,因为 jQuery 尚未准备好处理该请求。
考虑以下示例,其中屏幕上显示两个占位符,我们将使用 jQuery 隐藏它们。
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script>
<script>
// We're not ready yet. This will fail.
$(".placeholder").hide();
$(document).ready(function(){
// This won't fail
$("#one").hide();
});
</script>
</head>
<body>
<div id="one" class="placeholder">Placeholder One</div>
<div id="two" class="placeholder">Placeholder Two</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
乍一看这似乎$("#one").hide();是多余的,但事实并非如此。 $(".placeholder").hide();在 jQuery 准备好之前调用,因此它没有任何效果,这就是为什么如果您在 Web 浏览器中运行上面的标记,您会看到显示“占位符二”(而不是“占位符一”)。
既然我们已经解决了这个问题,那么更大问题(“正确的方法”)的解决方案就是 AJAX。
$(document).ready().祝你好运!