この質問からのコメントは、私に何かを考えさせました。$(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 開発インスペクターで見られるように)。ページのソースを表示すると、途中で表示されましたが、エコーしました。