プロが教える店舗&オフィスのセキュリティ対策術

データ検索のプログラムがあるのですが、

フォームを送信した後、処理に時間が掛かるものであった場合、ブラウザに「処理中...」と一旦表示させ、その後、検索結果を表示させる。

といった事をやりたいと思っています。どういう方法があるのでしょうか?ぜひ教えて頂けないでしょうか?

A 回答 (6件)

<div id="wait">処理中</div>



と先に表示しておいて、
検索結果と同時にCSSも出力する。

<style type="text/css">
<!--
#wait{display:none;}
-->
</style>

この回答への補足

ありがとうございます。
この「先に表示する」ができないのではないでしょうか?

ソケットを使用すれば、こちらの案が使えるかも知れないと思いました。とにかくまだテストができていません。。スミマセン。。

補足日時:2006/06/29 04:56
    • good
    • 0
この回答へのお礼

ポストを受けるプログラムで処理中と表示させたあと、ソケットを使用して検索データを作成し出力、その後にディスプレイnoneを追加しました。

OKでした。ソケットは不要だったかも知れませんが。。。

ありがとうございました。

お礼日時:2006/06/29 06:28

#3ですが。



出力制御関数を使えば先に表示してから検索処理をすることができます。

参考URL:http://jp.php.net/manual/ja/ref.outcontrol.php
    • good
    • 0

正攻法はAJAXでXMLHttpRequestと使ってデータ処理するのが良いと思いますが。



> AJAXでは得意な部分ですよね。でも、サーバサイドでやってしまいたいのです。

# 4さんの方法でいけるかもしれませんが、出力に注意しなければならないですね。

出力制御関数で処理途中でも出力がなされるようにする必要があります。
http://php.s3.to/man/ref.outcontrol.html

一つのアイデアとして、フレームが利用出来るなら、3つのページを使う事で処理可能かと思います。

1. ベースのページ 変数を 3の処理ページに受け渡す
2. 処理中と表示
3. 処理のページ。処理が終了したら、リダイレクトで結果を表示。
結果表示のリダイレクト先は親フレームである必要があるでしょうから、やはりwindow等のJavaScriptやRefleshタグは必要かもしれません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
出力制御関数というものがあるのですね、知りませんでした。。これを私が知らないばかりに話が通じていなかったのですね。皆様申し訳ありません。。

お礼日時:2006/06/29 05:02

#2です。



> echo '処理中...';と同時にリダイレクトさせるJavaScriptでタイマーをセットするのでしょうか?
いえ、JavaScriptは不要です。

1. echo '処理中...';
2. 検索開始 → 検索終了
3. 検索結果をHTML出力
4. <meta http-equiv='Refresh' content='0; url=./result.html' /> を出力

'処理中...' を出力したため、locationヘッダは扱えませんが、meta要素によるリダイレクトなら受け付けるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございます。
No.5の方にもアドバイスを頂いたように、私の無知で2度もご回答頂きましてスミマセン。本当にありがとうございます!

お礼日時:2006/06/29 05:04

echo '処理中...';



としてから、検索処理を行えば良いのではないでしょうか?

検索結果をそのまま出力すると、"処理中..." が残ってしまいますが、
検索結果をHTML出力して、出力したファイルにリダイレクトさせれば解決できると思います。

この回答への補足

このやり方ですと、
echo '処理中...';と同時にリダイレクトさせるJavaScriptでタイマーをセットするのでしょうか?リダイレクトさせるタイミングが難しいのでは?と感じてしまいました。

一度テストしてみたいと思います。ありがとうございます!

補足日時:2006/06/28 14:34
    • good
    • 0

一度処理中という表示をしたあと、ajaxでデータを


よみこみ表示するのが妥当かと。
    • good
    • 0
この回答へのお礼

ありがとうございます。
AJAXでは得意な部分ですよね。でも、サーバサイドでやってしまいたいのです。

お礼日時:2006/06/28 14:31

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