2012-12-07 83 views
0

我有一个poll()功能:如何停止多次执行javascript函数(轮询)?

$("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的次数)。

我该如何解决这个问题,以便每当我点击#refresh时,只剩下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

+0

这看起来正是我需要的,但出于某种原因,clearTimeout(a)是无法摧毁的setTimeout对象。 –

+0

@RiMMER也许@Mahan正在考虑'setInverval' /'clearInterval' – McGarnagle

+0

@RiMMER请检查我提的参考 –