我的网页上有以下脚本:
tid = setInterval(checkBounty, 1000);
function checkBounty(){
var elapsed = (Date.now()/1000) - parseInt($(".bounty").data('created')) ;
$(".remaining-time").html(valid - elapsed); //update remaining time until bounty expires
if (elapsed> valid){
$.POST('', {id: id}, function(){
console.log ('bounty cancelled');
clearInterval(tid);
});
//do an ajax post to cancel the bounty;
}
}
这会多次触发ajax post,因为它是异步执行的。我怎么能避免这种情况?
修改
我用我正在使用的代码更新了问题,忘了添加clearInterval。我现在意识到这是ajax在不到一秒的时间内没有响应,而且该功能再次被调用。
答案 0 :(得分:1)
它与异步无关。
如果您只想执行一次
,则应使用setTimeout
而不是setInterval
编辑重新阅读问题后,我认为你想要的是这个(如前所述):
var intervalid = setInterval(checkBounty, 1000); // capture the id of the interval
function checkBounty(){
var elapsed = (Date.now()/1000) - parseInt($(".bounty").data('created')) ;
$(".remaining-time").html(valid - elapsed); //update remaining time until bounty expires
if (elapsed> valid){
clearInterval(intervalid); // this stops the timer
//do an ajax post to cancel the bounty;
}
}
答案 1 :(得分:1)
它会多次触发AJAX调用,因为当您不再需要它时,不会停止间隔。它将继续倒计时并每次进行AJAX调用,因为条件将继续为真。
启动时获取间隔句柄:
var bountyInterval = setInterval(checkBounty, 1000);
然后当你想要停止它时(在AJAX调用之前),使用clearInterval
方法:
clearInterval(bountyInterval);
答案 2 :(得分:1)
清除间隔以销毁计时器
var timer = setInterval(checkBounty, 1000);
function checkBounty(){
var elapsed = (Date.now()/1000) - $(".bounty").data('created') ;
$(".remaining-time").html(valid - elapsed); //update remaining time until bounty expires
if (elapsed> valid){
clearInterval(timer);
//do an ajax post to cancel the bounty;
}
}