ここに私がしていることとその理由を簡単に示します。
- ユーザー入力に応じてさまざまなスクリプトで前処理されたフォームがあります
- 通常、スクリプトは数秒以内に実行されますが、サーバーの負荷などによっては、1 つのスクリプトに 10 秒程度かかる場合があります。
- ここで、「しばらくお待ちください...」を含むこの「ポップアップ」を実装したいと思います。そのためにblockUIを使用しています-これを実装するための簡単なプラグイン。
- ただし、スクリプトを高速に実行するための blockUI は非常にばかげており、画面上でポップアップが点滅するだけです。
- したがって、1000ms などのタイムアウトを設定して、フォームが既に完了していても blockUI が表示されるようにします。
- これまでかなり多くのことを試してきましたが、今では基本的に preventDefault を使用して setTimeout のフォーム送信をキャンセルしていますが、その後フォーム送信を完了できません。
編集:javascriptは非同期言語であるため、preventDefault(フォームの送信を停止)なしではsetTimeoutが起動せず、アクションがすぐにtrueを返すことがわかりました。
<form method="post" name="my_form" id="my_form" enctype="multipart/form-data">
<input type="submit" name="my_submit" id="my_submit" value="Submit" />
<div id="form_loading_message" style="display:none;">
<h1>Please wait, page is loading...</h1>
</div>
</form>
$('#my_submit').click(function(event) {
$.blockUI({
message: $('#form_loading_message')
});
var form = $('#my_form');
event.preventDefault();
setTimeout(function () {
form.unbind('submit').submit();
$.unblockUI();
}, 1000);
});
これを行う方法についてより良いアイデアがある場合は、他の提案も受け付けています...