datatableプラグインでサーバー側の並べ替えを行っています。データの読み込みには4〜5秒かかります。その間に、ユーザーが他のヘッダーをクリックすると、AJAX呼び出しが再度トリガーされます。
サーバー側のデータがまだ処理状態にあるときにユーザーを制限するにはどうすればよいですか?カスタムフラグのステータスを確認し、処理が完了するまで並べ替えを停止できる初期機能はありますか?
datatableプラグインでサーバー側の並べ替えを行っています。データの読み込みには4〜5秒かかります。その間に、ユーザーが他のヘッダーをクリックすると、AJAX呼び出しが再度トリガーされます。
サーバー側のデータがまだ処理状態にあるときにユーザーを制限するにはどうすればよいですか?カスタムフラグのステータスを確認し、処理が完了するまで並べ替えを停止できる初期機能はありますか?
最初にリクエストを受け取ったら、ボタンを無効にします。次に、サーバーの終了時にトリガーされるコールバック関数のボタンを有効にします。それがあなたのやり方ですが、コードが必要な場合は、コードを与えてください。
簡単なヒント:
async: false
メモリが正しく機能する場合、jqueryには、、、などajaxStart()
の3つの関数がajaxError()
ありajaxComplete()
ます。
ajaxStartの場合はグリッド全体/グリッドヘッダーのみを無効にし、ajaxError(エラー処理を実行できる場合)またはajaxCompleteの場合は再度有効にします。
これを行うにはさまざまな方法がありますが、最も簡単な方法はコードによって異なります。
$(document).ajaxSend( function(){
$('controls_selector').hide();
}).ajaxComplete( function(){
$('controls_selector').show();
});
これはそれを行いますが、これはあなたのページ上のajaxイベントの期間中それらを無効にします。ドキュメントでは、コールバック関数のパラメーターを使用してajax呼び出しの性質を判別し、それらの要素を選択的に表示/非表示にする方法について説明しています。
このようにして、プラグインのコードを掘り下げて操作することを回避できます。
こだわりのポイントは、要素を非表示にしたくない、イベントハンドラーを一時的に無効にする方法が必要であり、それらがデータテーブルに埋め込まれているため、変更したくないということです。私は次のことをします:
var tableheadclone = $('#mytableid thead>tr>th').clone(true);
次に、そのクローンを別の場所に書き込み、非表示にします(またはグローバルjs変数に保持します)。その後、使用することができます
$('#mytableid thead>tr>th').unbind('click');
イベントハンドラーを削除します。
replaceWith()
jQuery関数を使用してイベントハンドラーを復元できます。