1

假设我有一些文件: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");
        }
    });
}

怎么可能做到?

谢谢你的时间!

4

2 回答 2

6

记住已为您的计时器提供的 ID:

var timer = setInterval( ... );

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

clearInterval(timer);

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

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

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

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

于 2012-07-17T10:31:45.127 回答
1

尝试:

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


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

}
于 2012-07-17T10:33:44.623 回答