2012-07-17 74 views
1

执行功能假设我有一些文件:server.php,client.php和一个表:用户[ID,名称,状态]停止在setInterval的

server.php将处理像出头:更新用户状态,等等......

在client.php我有一个AJAX调用server.php为如果状态被激活(以每10秒)检查:

$(document).ready(function(){ 
    setInterval(function(){ 
     check_user_status(user_id) 
    },10000); 
}); 

check_user_status = function (user_id) { 
    $.ajax({ 
     type: "post", 
     data: "user_id="+user_id, 
     url : "server.php", 
     success: function(data){ 
      // do something with the response 
      // I want to exit the checking operation if user is already activated 
     }, 
     error: function(e){ 
      alert("Error occurred"); 
     } 
    }); 
} 

怎么能做到呢?

谢谢你的时间!

+0

[clearInterval(https://developer.mozilla.org/en/window.clearInterval)是启动的 – andyb 2012-07-17 10:32:40

+0

可能重复的好去处[如何阻止 “的setInterval”] (http://stackoverflow.com/questions/1831152/how-to-stop-setinterval) – andyb 2012-07-17 10:34:01

回答

5

记得已经给你的计时器ID:

var timer = setInterval(...); 

,然后取消它,当条件满足:

clearInterval(timer); 

timer变量将需要在“范围” - 最简单的解决方案是将所有的代码放入document.ready处理程序中。

FWIW,实际上最好使用setTimeout而不是setInterval,然后每次重新启动计时器。

setInterval会导致问题,如果您的服务器无响应,因为它会忠实地保持每10秒排队回调。一旦服务器响应,它会突然尝试立即运行所有回调。

改为使用setTimeout将确保没有新的检查排队,直到前一个实际完成。

+0

应该是'clearInterval(timer)',而不是'clearTimeout(timer)' – 2012-07-17 10:32:20

+0

@AlvinWong oops - 谢谢。 – Alnitak 2012-07-17 10:33:02

+0

工程就像一个魅力。非常感谢你。我接受了你的回答。 – 2012-07-17 10:40:58

1

尝试:

var intrvl = setInterval(function(){ 
     check_user_status(user_id) 
    },10000); 


.... 
success: function(data){ 
clearInterval(intrvl); 

}