这个问题的评论让我想到了一些事情。函数究竟什么时候$(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 开发检查器中所见)。查看页面的源代码显示它在中间,不过我在其中附和了它。