プロが教えるわが家の防犯対策術!

下記の参考URLのように、いったん表などを先に表示してしまい、
その後に時間のかかる処理を行い、少しずつ表示されていくようにしたいのですが、
やり方がわかりません。

参考URLを真似してみたのですが、ページ全体が表示されるまで
どうしても画面が止まってしまいます。(たまに2~3段階にわけて表示される)
ソースを見る限りJavaScriptで後半に実際の数値や文字列を
ページに追加していっているのだと思いますが、それ以上が分かりません。

どう検索していいのものか分からず困っています。
ご存知の方がいらっしゃいましたらご教授くださいませ。

《参考URL》
http://www.muryoutouroku.com/free/free06.html
http://www.it-work.jp/samples/gsearch/

A 回答 (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で似たようなことはやりましたがなにせ、だいぶ前のことで・・・。(^ ^ ;ゞ
    • good
    • 0
この回答へのお礼

http://php.planetmirror.com/manual/ja/function.f …
flush()という関数があったんですね!
おかげさまで問題が解決されました。
ありがとうございました。

http://php.planetmirror.com/manual/ja/function.o …
ob_implicit_flush()という関数を使うとflush()を明示的にコールする必要がなくなるみたいですね。

お礼日時:2005/03/07 00:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!