|
■No7326 (やま さん) に返信 > divタグで区切った範囲だけ、リロードさせる等の技がありましたら何方か御教示頂けないでしょうか。 >
スクリプト使わないと出来ないかな。
<body> <div style="font-size:500px">処理中</div> <iframe id=Frame1 name=Frame1 width=0 height=0></iframe> <script> function window.onload() { var f = document.getElementById("Frame1"); if (document.all) f.onload = function(e) { if (e.readyState == 200) { reloadWindow(f) } } else { f.onreadystatechange = function(e) { if (e.readyState == 200) { reloadWindow(f) } } } post(); }
function post() { var timeoutTime = parseInt(document.forms[0].porlingTime.value); setTimeout(function() { document.forms[0].submit(); }, timeoutTime); //「処理中」表示から N秒後 status.aspx へポストする }
//status.aspx が返す Json フォーマットの文字列 "{" から "}" までを文字列で返します。 var jsonFormat = { reloadURL : "/xxxx.aspx", /* 成功・失敗した時の 新しいとび先URL */ statusCode: "最中", /* 成功・失敗・最中 */ value: 0 /* 画面に進捗率を示す必要あれば、ここに 例えば 70 とか */ }; function reloadWindow(f) { var json = eval(f.document.body.innerText); switch (json.statusCode) { case "成功": case "失敗": location.reload(json.reloadURL); break; case "最中": post(); break; default: //別の不具合が原因で落ちている可能性 location.reload("404NotFound.aspx"); break; } } </script> <form method="post" target="Frame1" action="status.aspx"> <input type=hidden name="gamenID" value="xxxx" /> <input type=hidden name="sessionID" value="xxxxx" /><!-- セッションIDは埋め込まないのが普通? --> <input type=hidden name="dupID" value="xxxxx" /><!-- 多重ログイン防止キー --> <input type=hidden name="porlingTime" value="1500" /> </form> </body>
status.aspx は、サーバー処理が完了してない間は、上記HTMLを出力する。 サーバー処理が終わったら、適切な画面への URL 返して完了、とか。
-- サーバーで重たい処理を行う命令を出して、メイン画面がすぐ「処理中」 メッセージを出して終了する。 重たい処理は、DBへ、セッションIDをキーとする進捗状況を示すテンポラ リテーブルを用意して、そこへ処理状況のフラグをセットする。
クライアントで「処理中」と表示されているブラウザから、定期的にIFRAMEへ 処理状況フラグを見るための ASP を呼び出し、処理の完了を待つ。
-- こーゆー状況を想定した場合は上記のようなロジックで実現できるかと。 ASP の書き方に変えて見て下さい。多少無理があるかも??
# IFRAME へのポストの場合は、右上の旗やら地球儀が回りませんから、 # メッセージ表示するなり、アニメーションGIFなりを動作させて、サーバ # と同期しているのだから勝手に閉じるなよ、みたいな工夫は必要かも # しれません。
# XmlHttpRequest でも同じです。日本語に多少の癖がありますが。
|