setTimeout在计时器功能中工作不正常

时间:2015-07-28 02:30:34

标签: javascript jquery

我想在用户列表中显示在线时间。 当用户在线时,我将startOnline设置为CURRENT_TIME等于stopOnline,并在用户单击按钮注销时将其停止(保持持续时间)(将stopOnline设置为CURRENT_TIME),但时间不断增加。它只在我重新加载页面时停止。

这是我的计时器功能:

var runTimer=null;
function timer(time1, time2, id){
    var start=new Date(Date.parse(time1,"YYYY-mm-dd HH:mm:ss"));
    var stop=new Date(Date.parse(time2,"YYYY-mm-dd HH:mm:ss"));
    var time=0, offline=0;
    if(start.getTime()==stop.getTime()){
        stop=new Date();
    } else offline=1;
    time=stop.getTime()-start.getTime();
    var date = new Date(time);
    var hh = date.getUTCHours();
    var mm = date.getUTCMinutes();
    var ss = date.getSeconds();
    if (hh < 10) {hh = "0"+hh;}
    if (mm < 10) {mm = "0"+mm;}
    if (ss < 10) {ss = "0"+ss;}
    var t = hh+":"+mm+":"+ss;
    $('table.user tr[user-id="'+id+'"] .online').html(t);
    if(offline==1) clearTimeout(runTimer);
    runTimer = setTimeout(function(){
        if(offline==0) timer(time1, time2, id);
    },1000);
}

并且在ajax从数据库中获取用户的每个循环中,我调用函数

$.ajax({
    url      : 'getinfo.php',
    type     : 'get',
    async    : false,
    dataType : 'json',
    success  : function (data){
        $.each (data, function (key, item){
            timer(item['startOnline'],item['stopOnline'],item['id']);
        });
    }
});

当用户点击退出按钮时,我再次调用ajax来更新项目[&#39; stopOnline&#39;]并期望计时器保持持续时间。

更新 我通过在函数计时器中调用ajax get startOnline和stopOnline以及在ajax getinfo中调用setInterval函数来解决我的问题

0 个答案:

没有答案