停止在setInterval中执行函数

Nấm*_*Lùn 1 ajax jquery callback setinterval

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

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");
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

怎么可能呢?

谢谢你的时间!

Aln*_*tak 6

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

var timer = setInterval( ... );
Run Code Online (Sandbox Code Playgroud)

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

clearInterval(timer);
Run Code Online (Sandbox Code Playgroud)

timer变量将需要在"范围" -最简单的办法就是把所有的代码内部document.ready处理程序.

FWIW,它实际上更好地setTimeout代替setInterval,然后每次重新启动计时器.

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

setTimeout相反,使用将确保在前一个检查实际完成之前没有新检查排队.