停止在setInterval中执行函数

时间:2012-07-17 10:28:59

标签: jquery ajax callback setinterval

假设我有一些文件:server.php,client.php和一个表:user [id,name,status]

server.php将处理以下内容:更新用户状态等...

在client.php中,我有一个对server.php的ajax调用,用于检查状态是否被激活(每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");
        }
    });
}

怎么可能呢?

谢谢你的时间!

2 个答案:

答案 0 :(得分:6)

记住给定时器的ID:

var timer = setInterval( ... );

然后在满足条件时取消它:

clearInterval(timer);

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

FWIW,实际上最好使用setTimeout代替setInterval,然后每次都重新启动计时器。

如果您的服务器没有响应,

setInterval会导致问题,因为它会每10秒尽职尽责地排队回调。一旦服务器响应,它将突然尝试立即运行所有这些回调。

使用setTimeout代替将确保在上一个检查实际完成之前没有新检查排队。

答案 1 :(得分:1)

尝试:

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


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

}