这个问题的评论让我想到了一些事情。 $(document).ready()
函数什么时候会触发?显而易见的答案是“当文档准备就绪时”,但具体是什么时候呢?
例如,如果我打开输出缓冲并在 PHP 继续执行的同时刷新输出, 那么输出是否会发送到浏览器?那么在 PHP 脚本完成执行之前,文档是否已经准备就绪,或者该事件是否等待请求完成?
编辑:
回复基本上认为事件在客户端准备就绪时触发。
为了更好地理解(我应该首先做的),我刚刚设置了一个测试:
<?php ob_start(); ?>
<html>
<head>
<script type="text/javascript" src="lib/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
alert("READY");
});
</script>
</head>
<body>
<?php
ob_flush();
for ($i=0; $i<999999; $i++) {
echo "HELLO$i\n";
ob_flush();
}
?>
</body>
</html>
在这个例子中,结果是内容立即显示在页面上,但警告直到循环完成或脚本超时(30秒)才会发生。
到了依赖于使用哪个浏览器的程度,我尝试在我的循环中插入这个。
if ($i == 99) {
echo "</body></html>";
}
Chrome似乎通过在页面末尾放置这些标签来自动纠正它(如Web开发者检查器中所见)。查看页面源代码时,它显示在中间,那里我使用了echo。
<html>
内容并准备好DOM时,它会认为页面已经“准备就绪”,但某些CSS和图像仍可能未完成加载。浏览器并不知道或关心服务器在做什么,至少不会直接关心。 - Pointy</body>
或</html>
标记,但浏览器仍将以怪异模式呈现并发出DOMReady事件。同时,您可以关闭输出缓冲区或刷新缓冲区,并从服务器流式传输输出,因此由浏览器确定何时认为您已完成流式传输。 - vol7ron