2012-05-05 22 views
4

だから私は、テキストボックスにjQueryの中のすべてのkeyuppasteイベントのAJAXリクエストを呼び出しています:スロットルAJAXリクエスト

$("#server-label").bind("keyup paste", function() { 
    $.ajax()... 
}); 

問題は、これがユーザーの場合あまりにも多くのAJAX要求でありますキーを素早く押す。ユーザーがAJAXリクエストを呼び出す前に少しだけタイピング(例えば500ms)を打ち切るまで待つことをお勧めします。基本的にAJAXリクエストは、キーやペーストイベントが500ミリ秒間発せられなくなるまで行わないでください。

ありがとうございました。

答えて

11

それを追跡するためにsetTimeout()timer VARを使用してみてください:

var t; 
$("#server-label").on("keyup paste", function() { 
    clearTimeout(t); 
    t = setTimeout(function() { 
     $.ajax({/*[...]*/}); 
     //... 
    }, 500); 
}); 

ます。また、スロットルやdebounceを使用することができますが、私はあなたが関数内のコードをラップする場合、それは必要ではないと思いますオブジェクトまたは文字列をsetTimeout()関数に渡します。

+0

@Anon downvoter、あなたが私の解決策に問題がある場合は、何がうまくいかないかコメントすることができますので、改善することができます。 –

+0

これは良い始まりですが、この解決策は500msの待ち時間を意味します;-(イベントが「最後に」発射されたときを比較する必要があります) –

+1

@ThomasDecauxはい、これはOPによって要求された500msのアイドル時にajax要求を実行しますこのタイマーをあなたのニーズに適応させることができます。たとえば、200〜300msです。 "最後の"起動された部分の意味を理解していない場合、 'clearTimeout'はまだ処理されていない場合に備えて最後にキューに入れられたタイムアウトをクリアします、またはそれ以外の副作用はない。 –