2012-02-17 15 views
3

(AJAX要求の頻度を制御する)私はkeyupイベント上で実行されるいくつかのコードがあります。実行コードのみn秒ごと

$('#some-text-box').keyup(function() { 
    var $text = $(this).text(); 
    // do some ajax stuff using $text 
}); 

私はAJAX要求を行うだけに上記を変更するにはどうすればよいのすべてのnミリ秒?

ありがとうございました。ドキュメントレディ機能インサイド

+0

あなたは、それはdoesnのように、それを制限する意味1ミリ秒以上のリクエストを何ミリ秒も行うのですか? –

+0

はい、そうです。 – ale

答えて

3
var flag = true; 
$('#some-text-box').keyup(function() { 
    var $text = $(this).text(); 
    if(flag){   
     flag = false; 
     $.ajax({ 
     // other parameter 
     success : function(){     
      setTimeout(function(){ 
       flag = true; 
       }, 5000); 
     } 
     }); 
    } 
}); 
+0

フラグを設定するには、ajaxの成功結果を待つ必要があると思いますが、これは時間がかかりすぎて、フラグが設定される前にユーザーが 'keyup'を何回も(そしてもっと多くのajaxリクエストを呼び出すように)許可します。 – musefan

+0

pls checkコードをもう一度..私はそれがOPの要件をfullfillと思う。 –

+0

現在の 'setTimeout'がまだ保留中である限り、決して実行されないので、おそらく' clearTimeout'をスキップすることができます。 –

0

-

var params = null; 
var frequency = 300; 

$('#some-text-box').keyup(function() { 
    var $text = $(this).text(); 
    params = { 
    //stuff we'd like to send to the server 
    } 
}); 

setInterval(function() { 
    if (params !== null) { 
    $.ajax({ 
     //Send in params here 
    }); 
    params = null; 
    } 
}, frequency); 
3

これはあなたのために働く必要があります...

var canAjaxFlag = true; 

$('#some-text-box').keyup(function() { 
    var $text = $(this).text(); 
    if(canAjaxFlag){ 
     canAjaxFlag = false;//set this as quickly as possible 
     // do some ajax stuff using $text 
     setTimeout(function(){ 
     canAjaxFlag = true; 
     }, 1000); 
    } 
}); 

あなたは間隔がすることができます、1000ミリ秒に設定されていることがわかりますあなたのニーズに合わせてこれを変更してください

重要:falgバックtrueに設定された後の使用setTimeoutないsetIntervalは、あなたはそれが実行し続けるようにしたくない - おかげアップ

ヘッド用@amnotiamするHere is a working example

+1

これは他のものより少し上手ですが、なぜあなたは 'setInterval'を使用していますか? 'canAjaxFlag'を' true'に設定すると、複数のインターバルを実行することになります。 –

+0

@amnotiam:どのように複数ですか?彼らは次の間隔が最初に完了した後にのみキックオフすることができます...または多分私は 'setTimeout'を使用するつもりだった...固定 – musefan

+2

私はsetTimeoutはより適切だろうと思う.. –

関連する問題