0

私はpoll()機能を持っています:

$("document").ready(function(){
   poll(10);
   $("#refresh").click(function(){ poll(10); });
});

function poll(timeout){
   return setTimeout(function(){
      if (timeout == 10){
         timeout = 10000;
      }
      $.ajax({ url: "/ajax/livedata.php", success: function(data){
         $("#result").html(data);
         poll(timeout);
      }, dataType: "json"});
   }, timeout);
}

だから、そこで何が起こるか:

1)ページの読み込み時にpoll()が呼び出され、ループの実行が開始されます。

2)#refreshクリックするpoll()と、その瞬間に呼び出され、すぐに新しいデータを要求します。

問題:クリック#refreshして新しいデータをリクエストするたびにpoll()、が再度呼び出されますが、複数回起動されます(最初のクリック+新しいクリックごと)。したがって、期待どおりに10秒ごとに起動するのではなく、10秒ごとに複数回起動します(クリックした回数によって異なります#refresh)。

これを修正して、クリックするたびに#refresh1つのインスタンスのみがループしたままになるようにするにはどうすればよいですか?

4

1 に答える 1

0

setTimeoutまず、オブジェクトを次のような変数に格納します

var a = poll(10);

次に、このコードを使用して更新をクリックすると停止します

clearTimeout(a);

こんな感じになります

$("document").ready(function(){
   var a = null;   
   $("#refresh").click(function(){ 
      if(a != null){
           clearTimeout(a);
           a = null;
      }
      a = poll(10); 
   });
});

参照:

http://www.w3schools.com/jsref/met_win_cleartimeout.asp

http://www.w3schools.com/js/tryit.asp?filename=tryjs_timing_stop

于 2012-12-07T02:00:00.560 に答える