• 締切済み

表示待ち時間に「処理中...」のメッセージを表示させたいのですが

表示に5秒くらいかかるページを作っています。表示されるまで、「処理中...」のメッセージを表示させたいと思っています。Googleで検索したところ、 http://himajin.moo.jp/java/speed/loading.html というページを見つけまして、下記のように若干変更して書いてみました。 ---- <script language="JavaScript"><!-- function loading(){ document.getElementById("nowload").style.display= "none"; } onload=loading; // --></script> <noscript>表示するにはscriptを有効にしてください。</noscript> <div id="nowload"style="position:absolute;text-align:center;font-size:40px;width:100%"> <b>処理中....</b> </div> <div id="contents"> <?PHP ここに5秒くらいかかるPHP処理 ?> </div> ---- しかし、実行してみると5秒くらい画面に何も表示されず、その後処理し終わった画面が表示されるような挙動です。よく見てみると最終の画面が表示される直前の一瞬「処理中...」の文字が出ているようです。 つまり、「処理中...」の文字をまずはすばやく出して欲しいのに、最終の画面表示とほぼ同時に出力されるような挙動をしています。 まずは「処理中...」の文字を出すにはどうすればいいのでしょうか?ご存知の方、ご教授ください。

みんなの回答

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.4

こんにちは PHPはあまり扱っていないので参考程度にしかならないかもしれないですけど・・・ <?php ~ ?>の部分を外部ファイルにしてiframeとかで読み込むというのではダメですか? 扱ってないので時間のかかる処理が思いつかなかったのでとりあえず表を書いてsleep(5)で5秒ほど止めてみたのですがそのままやったときは読み込み中フリーズしたような感じでしたがPHP処理を外部ファイルでiframeに読み込んでやるとうまくいきました 多分なのであってるかどうかは分かりませんが</body>まで読み込んでページが表示されるので参考サイトの場合は読み込んで外部ファイルであるimgファイルを表示する時間だけNow Loadingを表示してるのではないでしょうか? ですので</body>に行き着くまでに5秒の処理時間が必要になる今回の場合、その間空白のページが表示され、ページの表示直前に一瞬だけ処理中が表示されてるのだと思います なので上記の場合もiframe内の表示はされていないけどページ(now Loading)は表示され、iframeの表示がすべて終わったらfunction loading()が行われるのだと思う あくまでも推測ですので定かではないですけど(><) 一応書いておきますけどPHP5です

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

>の部分が先に吐き出さないのですよ といわれても、サーバー側は吐き出しているとおもいますよ。 出力がとまっている5秒の間にブラウザのストップボタンを おしてソースを確認してみるとか・・・ あとはPHPのバージョンによっては多少挙動が違うのかも。 わたしの環境は4.4.4ですね

goroneko-begin
質問者

補足

ありがとうございます。 そうですね。ストップボタンを押して確認してみます。確認しても対処方法はわかりませんが・・・(x_x;;) PHPは5を使っています。PHPのバージョンの違いもあるかもですね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

phpのバッファリングを重い処理のまえにはきだしてやるだけです。 <script language="JavaScript"><!-- function loading(){ document.getElementById("nowload").style.display= "none"; } onload=loading; // --></script> <noscript>表示するにはscriptを有効にしてください。</noscript> <div id="nowload"style="position:absolute;text-align:center;font-size:40px;width:100%"> <b>処理中....</b> </div> <div id="contents"> <?PHP flush(); sleep(5); ?> </div>

goroneko-begin
質問者

補足

ありがとうございます。 そうですよね。そう考えていた(サンプルでも)のですが、 <div id="nowload"style="position:absolute;text-align:center;font-size:40px;width:100%"> <b>処理中....</b> </div> の部分が先に吐き出さないのですよ。挙動としては <div id="contents"> <?PHP flush(); sleep(5); ?> </div> の表示といっしょか直前に吐き出されるような挙動をしています。 私が、勘違いしてミスったプログラムをしているのでしょうか。う~ん???

  • PED02744
  • ベストアンサー率40% (157/390)
回答No.1

PHPと書かれているということは、「時間がかかるのはサーバ側処理」ということですね? ならば、これではだめです。 この画面を修正するのではなく、「このPHPを含む画面を呼び出している画面」側にJavaScriptを入れる必要があります。 <script> function submit_func(){ // 処理中メッセージを表示する // 5秒以上かかる処理をsubmitする } </script> <form action="5秒以上かかる処理を含むphp"> <input type="button" name="OK" onClick="submit_func();"> </form>

goroneko-begin
質問者

補足

回答ありがとうございます。早速行ってみました。 動きとしては、 「読み出している画面」にて読み出しボタンを押す。    ↓ 「処理中...」のメッセージ表示    ↓ 画面の表示が消える    ↓ 5秒間時間経過    ↓ 読み出されている画面表示 となります。微妙に期待していた動きと違います。私が認識違いをしているのでしょうか。 もし、ご存知であればご教授ください。

関連するQ&A

  • phpの処理中に画面表示ををするには?

    phpの処理中に画面表示ををするには? phpの処理中にalertや画面表示ができるように依頼があり。 使ってはいけない方法もあり解決方法がみつからず困っています。 処理内容 5回ループする処理で1回の処理に約10秒かかる、 各回の処理が終わったところで画面表示やalertをする。 使ってはいけない方法 ・iframeやAjaxなどの非同期処理みたいな事はしない。(却下されました、、) ・このphpのループの各回でsubmitや再読み込みをさせない。 今までphpの処理が全て終わってから画面表示するイメージでいたので、 実現できるのか確認するため下記のソースを作りました。 結果:10秒ではなく50秒後にすべてのalertがでてきました。 ----------ここから---------- <html><head> <script> <!-- <? for(i=0; i<5; i++){ //10秒の処理 ?> alert("メッセージ:".i); <? } ?> //--> </script> </head> <body>無理な気がする</body> </html> ----------ここまで---------- (変数のダラは抜いています) 使ってはいけない方法以外に解決方法はあるのでしょうか。

    • ベストアンサー
    • PHP
  • メールフォームの位置 及び 文字の回りこみ

    お世話になります。 忍者ホームページにて忍者メールフォームを使用しています。 http://charanporan.xxxxxxxx.jp/bosyuu.html/ メールフォームを設置したところ左側に表示されましたが、右側に表示するには どのようにすれば良いですか? (試した例⇒ <DIV style="align:right"> )変化ありませんでした。 また メールフォームが左側に表示されているとき、右側への文字の回りこみ メールフォームが右側に表示されているとき、左側への文字の回りこみ はどのようにすれば良いですか? (試した例⇒ <DIV style="float: right;"> )変化ありませんでした。 メールフォーム設置タグ <!--ninja_style_mailform--> <div id="SMFkkk">中略</div> <script type="text/javascript"中略</script> <noscript>中略</noscript> <!--ninja_style_mailform--> 上記がメールフォームタグです。 具体的にどのようにすればよいか教えてください。 よろしくお願いします。

  • 読み込み開始から読み込み終了まで処理中表示する方法

    ページを読み込み開始してから読み込み終了までの間に「処理中」と画面に表示したいと思い、http://okwave.jp/qa/q2753468.htmlを参考に下記のソースを書かさせていただいました。 【ソース】 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title>title</title> <script type="text/javascript"> <!-- window.onload=function(){ document.getElementById("loading").style.display="none"; } // --> </script> </head> <body> <div id="loading">ロード中</div> <?php // 本当はここでphpを用い、大量のデータベースアクセスを行っていて、処理に時間がかかっています。 flush(); sleep(2); ?> 本文です<br /> </body> </html> ただし、上記をブラウザで閲覧した所、最初に砂時計アイコンが表示され、その後しばらくして「本文です」と表示されましたが、「ロード中」という表示はされませんでした。 これをページ読み込み時に「ロード中」とブラウザ上に表示させ、しばらくたった後、「ロード中」を消した上で「本文です」と表示させたいと思ったのですが、どのように書けば良いか分からなかった為、アドバイスいただける方がいらっしゃいましたら、ご教示の程よろしくお願いします。 以上、宜しくお願いします。

  • javascriptでの表示について

    他のページの<div><ul></ul></div>の間の文字を拾ってくるjavascriptがあります。 【ベースページ】 <script type="text/javascript"> $(function(){ $("#test").load("https://hoge.ne.jp/read.php#test ul", function(data) { if(data == null){ $("#test").append("読込みに失敗しました"); } }); }); </script> 【読み込みページ】 read.php <div id="test"><ul> テストです </ul></div> 【ベースページ】に <div id="test"></div> と記載すると、読み込みページの<div><ul></ul></div>の間の文字「テストです」を拾ってきます。 これをjavascript内で表示したいと思います。 <script> document.write( document.getElementById('read77') ); </script> では表示されません。 どのように書けば表示されますでしょうか?

  • noscriptタグにCSSが適応されません。

    下記のようにコーディングをしたのですが、noscriptタグにCSSが適応されません。 noscriptタグは特殊でCSSが当てられないのでしょうか? デブツールズで見ても、noscriptタグのCSSには親要素の継承した情報しかありませんでした。 div#loading_imgにカラーなどをいれるとちゃんと継承します。 HTML <!--Loading Image--> <div id="loading_img"> <img src="img/base/loading.gif" width="128" height="15" /> <p>Now Loading</p> <noscript>当サイトはjavascriptを使用しています。</br>javascriptをONにしてください。</br>ONにしなければこの表示は消えません。</noscript> </div> CSS /*Loading Image*/ div#loading_img { position: fixed; top: 50%; right: 50%; bottom: 50%; left: 50%; z-index: 9999; width: 128px; margin: -7.5px 0px 0px -64px; } div#loading_img p { text-align: center; color: #02CCFF; } noscript { text-align: center; color: #044901!important; font-weight: bolder; } /*Loading Image End*/

    • ベストアンサー
    • CSS
  • アクセス解析広告の表示義務

    ブログでFC2のアクセス解析を使用しています。 アイコンタイプは目立ってしまうので、ソーシャルタイプ(テキスト)で、 <body> ~ </body> の下の方に設置しています。 (この為、解析が多少漏れても仕方ないと思っています) 下記が解析タグの全てです。 <!-- [FC2 Analyzer] http://analysis.fc2.com/ --> <script language="javascript" src="http://analyzer99.fc2.com/ana/processor.php?uid=999999" type="text/javascript"></script> <noscript> <div align="right"> <img src="http://analyzer99.fc2.com/ana/icon.php?uid=999999&ref=&href=&wid=0&hei=0&&col=0" /> <a href="http://ranking.fc2.com/">ランキング</a> </div></noscript> <div style="width:180px;display:inline;"> <ol style="text-align:left;list-style-type:none;margin:3px;font-size:10pt;display:inline;"> <li style="padding-left:0px;margin:3px 5px 3px 3px;display:inline;"> <strong> <a href="http://analysis.fc2.com/">無料</a><a href="http://analysis.fc2.com/">アクセス解析</a> </strong></li></ol></div> <!-- [FC2 Analyzer] --> しかし、これを全て貼ると広告の文字が大きく太字。 そして、「無料」「アクセス解析」以外の広告が出てしまいます。 上記のタグだと「ランキング」の部分。 ただ、これは時間によって変化していくみたい? 「無料」「アクセス解析」の広告が表示されるのは仕方ないのですが、 「ランキング」部分の広告を消しても違反にはならいでしょうか? 具体的には、 ・<noscript>~</noscript>を全て消す。 あと、他に私が消した箇所 ・<div style=から、<li style=・・・・display:inline;">の箇所を全て消す。 ・<strong>を消す。 この2点は表示される「無料 アクセス解析」の文字位置、太さ等の変更の為。 上記で問題はありますか?違反になるとか。 特に、<noscript>~</noscript>の意味が分からず気になっています。 調べると、JavaScriptが有効でない時に表示される?とか・・・。 全てを消さず、 <noscript></noscript>  という風に、noscriptのタグは残した方が良いのでしょうか? 又は、<noscript>~</noscript>のタグ全て表示義務があるのでしたら、 その箇所のみ、<body>間の別の場所に貼る事は可能ですか? 説明下手で申し訳ないですが、 結局は、無料アクセス解析をなるべく目立たず設置する方法を知りたい、という事です。 よろしくお願いします。

  • 「ポタン」で表示・非表示 (つづき)(^^;

    「ポタン」で表示・非表示 ブロック<Div></Div>の「表示・非表示」を「ポタン」でやりたいのですが。。の件で、下記の回答をいただき、できたのですが、 最初に「★非表示」の状態にしたい場合は、どうしたらいいのでしょうか? よろしく願いいたします。 <html> <body> <div id="a">abcdefg</div> <input type="button" value="on/off" onClick="disp('a')"> <hr> <div id="b">abcdefg</div> <input type="button" value="on/off" onClick="disp('b')"> <hr> <script> function disp(id){ // alert(document.getElementById(id).style.display=='none'?'block':'none'); document.getElementById(id).style.display = document.getElementById(id).style.display=='none'?'block':'none'; } </script>

  • ランダムにメッセージを表示させる方法

    メッセージページに書いたものをIFRAMEを使ってスクロール表示させるスクリプトですが、これを改造して 一番先頭からスクロールするのではなく、ランダムに 3行目とかからスクロールさせる方法を教えてください。(スクロールしなくてもランダムに表示されれば良いのですが) ##メッセージ表示ページ 1.html ## <BODY> <P align="center"><iframe id="datamain" src="2.html" width=150 height=150 marginwidth=0 marginheight=0 hspace=0 vspace=0 frameborder=1 scrolling=no></iframe></P> </BODY> ######メッセージデータページ 2.html ####### <BODY> <DIV id="datacontainer" style="position:absolute;left:5;top:0;width:100%" onmouseover="scrollspeed=0" onmouseout="scrollspeed=cache"> <div>1 メッセージ。</div> <div>2 メッセージ。</div> <div>3 メッセージ。</div> <div>4 メッセージ。</div> </DIV> <DIV> <SCRIPT language="JavaScript1.2"> //<iframe> script by Dynamicdrive.com //Specify speed of scroll. Larger=faster (ie: 5) var scrollspeed=cache=3 function initialize(){ marqueeheight=document.all? parent.document.all.datamain.height : parent.document.getElementById("datamain").getAttribute("height") dataobj=document.all? document.all.datacontainer : document.getElementById("datacontainer") dataobj.style.top=5 thelength=dataobj.offsetHeight scrolltest() } function scrolltest(){ dataobj.style.top=parseInt(dataobj.style.top)-scrollspeed if (parseInt(dataobj.style.top)<thelength*(-1)) dataobj.style.top=5 setTimeout("scrolltest()",50) } window.onload=initialize </SCRIPT> </DIV> </BODY>

  • javascriptでボックスの表示非表示

    javascriptでボックスにマウスオーバーすると、同じ位置に別のボックスを表示させたいと考えています。 以下のようにしてみましたが、ie9ではできたのですが、 ie6、ie7、ie8ではdiv1とdiv2が横に並んでしまいました。 何か解決方法があれば教えてください。 よろしくお願いいたします。 <script type="text/javascript"> window.onload = function() { div1 = document.getElementById("div1"); div2 = document.getElementById("div2"); div1.onmouseover = function() { div1.style.display = "none"; div2.style.display = "block"; }; div2.onmouseout = function() { div1.style.display = "block"; div2.style.display = "none"; }; div1.style.display = "block"; div2.style.display = "none"; }; </script> <div id="div1" class="box01"> <div id="pic"><img src="image01.gif"></div> <div id="txt">てきすとてきすと</div> </div> <div id="div2" class="box02"> <div id="pic"><img src="image02.gif"></div> <div id="txt">てきすとてきすと</div> </div>

  • 重い処理を行っているとGIFアニメが止まってしまう

    お世話になります。 ローディング画面を作成しようと思いスピナーのGIFを用意しました。 <div id="main"> <div id="loading"><img src="spinner.gif" /></div> </div> 上記のような感じで画面遷移した際にはスピナーが表示されるようにして、 ページの読み込みが終わった際に $(window).load(function() { $("#main").load('htmlのURL'); }); のように、htmlを読み込んで表示しようとしています。 実際にはjqueryのajax通信を使って非同期にサーバー側でHTMLを生成してそれを読み込むようにしているのですが、読み込む際にスピナーのGIFアニメが止まってしまいます。 重い処理(サーバー側の処理)を行っているからだと思うのですがGIFアニメをとめずにhtmlを更新することはできないのでしょうか。 よろしくお願いします。