WEBの処理中メッセージの表示

WEBの処理中メッセージの表示

サーバーの処理( CGI )時間が数分かかるようなアプリケーションの場合、
ブラウザー側はサーバーからのレスポンス待ち状態になり、
あたかも画面が固まっているかのように見えます。

この状態を改善するために、ブラウザー側では「処理中ですのでお待ち下さい。」
というようなメッセージを表示することによりユーザーに処理ステータスを知らせる、
このような手法を用いることがあります。

それでは「WEBの処理中メッセージの表示」で使用されるサンプルを紹介します。

フォーム Submitを使用した場合の処理中メッセージ表示

■ 初期画面

サンプル画面

■ HTML サンプルソース
  <html>
  <head>
  <meta http-equiv="Content-Language" content="ja">
  <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS">
  <title>処理中メッセージ表示サンプル</title>
  <link rel="stylesheet" href="STYLE.CSS">
  <script type="text/javascript">
  
  /*実行ボタン押下時の関数*/
  function Form_Submit(){
        //document.forms["addForm"].submit();  //フォーム内容を送信します。※サンプルのためコメントアウトしています。
          /*メッセージを非表示状態から表示状態へ変更します。 
          メッセージを表示してからSubmitを行うとGIFアニメが再生されないため、
          Submitしてからメッセージを表示しています。*/
     A document.getElementById("Loading").style.display = "block";  //メッセージのDIV要素をスタイルシートのdisplayプロパティで非表示から表示へ変更します
        document.getElementById("Loading").style.top = 150
        document.getElementById("Loading").style.left = (document.body.clientWidth - 300) / 2; //メッセージのDIV要素を画面中央に配置します
  }

  </script>
  </head>
  <body>

  <form name="addForm" action="SMPMSG_END.HTM" method="POST">
  <h1>処理中メッセージ表示サンプル</h1>
  <h3>Form Submitの場合のメッセージ表示</h3>
  <hr>
  <br /><br /><br /><br /><br />
  <p class="example">実行ボタンを押すと<b>「処理中...しばらくお待ち下さい」</b>というメッセージが表示されます。</p>
  <br /><br /><br /><br /><br />
  <input type="button" value="実行" onclick="Form_Submit()" class="hand">
  <br /><br />
  <hr>
  <input type="button" value="閉じる" onclick="window.opener=true;window.close()" class="hand">
  </form>
  <!--しばらくお待ち下さい メッセージ-->
@ <div id="Loading" style="display:none;">
        <img src="IMG/LOADING.GIF" class="loadimg">
        <p class="loadmsg">
          処理中...<br>
          しばらくお待ち下さい。
        </p>
  </div>
  <br /><br /><br />
  <p class="copy">©2011 Office Quattro Co.,Ltd. All rights reserved.
  </div>

  </body>
  </html>
					
■ 解説

まず WEB の処理中メッセージを表示するには、@ のようにHTMLファイルのソースに
「処理中に表示するメッセージ」を記述する必要があります。下記のようにHTMLタグを追加します。
また <DIV>タグstyle属性プロパティ:displaynone を指定し、
非表示状態」 で記述しておきます。

<div id="Loading" style="display:none;">
     <img src="IMG/LOADING.GIF" class="loadimg">
     <p class="loadmsg">データ取得中...<br>しばらくお待ち下さい。</p>
</div>

次にフォームSubmit を実行(この場合、実行ボタン押下)したとき A のJavaScriptで、
非表示状態」 になっている <DIV>タグstyle属性プロパティ:displayblock に変更し
表示状態」 に切り替える処理を行います。
※フォームSubmit 時の表示切り替え処理は、下記のように Submit実行後に行うようにして下さい。

function Form_Submit(){
   document.forms["addForm"].submit();
   document.getElementById("Loading").style.display = "block";
}

Ajaxを使用した場合の処理中メッセージ表示

■ 初期画面

サンプル画面

■ HTML サンプルソース
<html>
  <head>
  <meta http-equiv="Content-Language" content="ja">
  <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
  <title>処理中メッセージ表示サンプル</title>
  <link rel="stylesheet" href="style.css">
  <script language="JavaScript">

  /* 実行ボタン押下時の関数 */
  function Start_Ajax(){
  C document.getElementById("Loading").style.display = "block";  //メッセージのDIV要素をスタイルシートのdisplayプロパティで非表示から表示へ変更します
     document.getElementById("Loading").style.top = 150
     document.getElementById("Loading").style.left = (document.body.clientWidth - 300) / 2; //メッセージのDIV要素を画面中央に配置します

     var reqUrl="MESSAGE.TXT";
     new Ajax.Request(reqUrl, {method :"GET",onComplete:setShnData});  //Ajaxでリクエストを開始します
  }

  /*Ajaxのコールバック関数*/
  function setShnData(httpObj){
  D document.getElementById("Loading").style.display = "none";  //メッセージのDIV要素をスタイルシートのdisplayプロパティで表示から非表示へ変更します
  }

  </script>
  </head>
  <body>

  <form name="frmDsphead">
  <h1>処理中メッセージ表示サンプル</h1>
  <h3>Ajaxの場合のメッセージ表示</h3>
  <hr>
  <br /><br /><br /><br /><br />
  <p class="example">実行ボタンを押すとAjaxで通信を行い、<b>「処理中...しばらくお待ち下さい」</b>というメッセージを表示します。<br></p>
  <br /><br /><br /><br />
  <input type="button" value="実行" onclick="Start_Ajax()" class="hand">
  <br /><br />
  <hr>
  <input type="button" class="HAND" value="閉じる" onClick="clsApplication();">
  </form>
  <!--しばらくお待ち下さい メッセージ-->
B <div id="Loading" style="display:none;">
        <img src="IMG/LOADING.GIF" class="loadimg">
        <p class="loadmsg">
          処理中...<br>
          しばらくお待ち下さい。
        </p>
  </div>
  <br /><br /><br />
  <p class="copy">©2011 Office Quattro Co.,Ltd. All rights reserved.
  </body>
  </html>
					
■ 解説

Ajax での WEB の処理中メッセージを表示する場合でも、B のようにHTMLファイルのソースに
「処理中に表示するメッセージ」を記述する必要があります。下記のようなHTMLタグを追加します。
また <DIV>タグstyle属性プロパティ:displaynone を指定し、
非表示状態」 で記述しておきます。

<div id="Loading" style="display:none;">
     <img src="IMG/LOADING.GIF" class="loadimg">
     <p class="loadmsg">データ取得中...<br>しばらくお待ち下さい。</p>
</div>

次に Ajax リクエストを実行(この場合、実行ボタン押下)する直前に C のJavaScriptで、
非表示状態」 になっている <DIV>タグstyle属性プロパティ:displayblock に変更し
表示状態」 に切り替える処理を行います。

 function Start_Ajax(){
    document.getElementById("Loading").style.display = "block";
    new Ajax.Request(reqUrl, {method :"GET",onComplete:CallBackFunction});  //Ajaxでリクエストを開始
}

次にサーバー側からレスポンスされると Ajax の場合、指定されているコールバック関数が実行されます。
そのコールバック関数内の D で、「表示状態」 になっていた <DIV>タグ の内容を 「非表示状態」 に戻します。

function CallBackFunction(httpObj){
    document.getElementById("Loading").style.display = "none";
}