- ベストアンサー
ページを段階的に表示する方法とは?
- ページを段階的に表示する方法について知りたいです。参考URLのように、表などを先に表示して後半の処理を行い、少しずつ表示させる方法が知りたいです。
- 参考URLのページを真似してみましたが、ページ全体が表示されるまで画面が止まってしまいます。ページにはJavaScriptを使用して後半の内容を追加しているようですが、具体的な方法がわかりません。
- どのように検索すれば、ページを段階的に表示する方法がわかるでしょうか?困っているので、詳しい方がいらっしゃれば教えてください。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 えっと、おそらくテーブルタグを使用していた場合において、画面が止まって見えるというのは、テーブルタグの閉じタグが出力されていないためだと思われます。 そして、テーブルの閉じタグは時間のかかる処理の前に出力した方がよいのですが、まず以下の実験をしてみてください。以下の実験において、ブラウザはIE(インターネットエクスプローラー)とします。 <? for($i=0;$i<5;$i++) { print "b"; flush(); sleep(1); } ?> おそらく、やはり画面が真っ白のまま5秒後に「b」が5つ表示されたと思います。 では、以下に修正します。 aaaaaaaaaaa <? for($i=0;$i<5;$i++) { print "d";flush(); sleep(1); } ?> これでも、同じような結果になったと思います。では、次に以下のように修正します。 <BR> <? for($i=0;$i<5;$i++) { print "d";flush(); sleep(1); } ?> 詳しくは知りませんが、IEは256バイト分のデータ(改行や空白文字でもかまいません)を受け取らないと、真っ白のままのようです。が、「改行タグ」を一個でもうけとると即座に受け取ったデータを表示してくれました。 より具体的に修正すると、 <HTML><HEAD><TITLE>TEST</TITLE></HEAD> <BODY> <table width="450" border="1" cellspacing="0" cellpadding="0"> <tr> <td bgcolor="#0FFF000" height="200">a </td> </tr> </TABLE>←時間のかかる処理をやる前に必ず出力してテーブルタグを終了させる <? for($i=0;$i<5;$i++) { print "d";flush(); sleep(1); } ?> サーバ側の方なんですが、ブラウザに出力する前に、バッファが満タンにならないと送信しない設定になっていることが多いので、「flush関数」でその処理を無効にします。 時間のかかる処理をJavaScriptでやるかサーバ内でやるかは別にして、どちらにしろテーブルを形成した後、文字や数字で埋めていくには、JavaScriptしかないと思います。 そういった処理は、JavaScript専門の方でお聞きください。 昔、JavaScriptで似たようなことはやりましたがなにせ、だいぶ前のことで・・・。(^ ^ ;ゞ
お礼
http://php.planetmirror.com/manual/ja/function.flush.php flush()という関数があったんですね! おかげさまで問題が解決されました。 ありがとうございました。 http://php.planetmirror.com/manual/ja/function.ob-implicit-flush.php ob_implicit_flush()という関数を使うとflush()を明示的にコールする必要がなくなるみたいですね。