我有一个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
的次数)。
如何解决此问题,以便每当我点击#refresh
时,只有1个实例会循环播放?
答案 0 :(得分: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