我认为clearInterval问题

时间:2014-02-26 09:45:24

标签: javascript jquery

我和许多初学者一样来到这里:D所以,不要浪费时间,我会解释我的问题。

http://heavenpro.lt/ukv - 演示网站。有2个用户等。

sekret - demo 
demo - demo 

(用于登录)如果您发现任何错误 - 很高兴知道有机会解决它。 当用户关闭时(Išj。 - 按钮),演示用户看到日志:等待学生(Laukiama studento)

在sekret打开之后(Įjungt - 按钮)一切似乎都没问题,演示用户看到活动用户,点击下一个 - 提供改变了学生的警报,如果你想更新信息(看新的)。关闭后(Išj。按钮)在IE以外的所有浏览器中运行良好..似乎clearInterval不起作用,经过大量发送查询和响应后,它弹出多个警报窗口.. 希望你明白我的意思。

var sid = "{$i->sid}";
var mid = "{$i->mid}";

var update_st = setInterval(function(){
    $.post(
        'ajax/check-student.php',
        { sid: sid, mid: mid },
        function(resp){
            if(resp == "next") {
                var cf = confirm('Buvo pakeistas studentas besiginantis darbą. Ar rodyti sekantį studentą?');
                clearInterval(update_st);

                if (cf) {
                    window.location = "?";
                } 
                else {
                alert('Kai norėsite perjungti kitą vartotoją, prašome perkrauti puslapį.');
                clearInterval(update_st);
            }
        } 
        else if (resp == "none") {
            alert("Gynimas baigtas. Ačiū už dalyvavimą vertinimo komisijoje.");
            clearInterval(update_st); // this place not works..
            window.location = "?";
        }
    });
}, 250);

经过测试很多时间..似乎有时候工作正常..在IE 9上测试..

也许有人可以提供任何其他想法以同样的方式吗?没有多少查询每秒发送到文件...

1 个答案:

答案 0 :(得分:1)

您可以使用setTimeout而不是setInterval,原因很多...... 所以你将调用创建setTimeout的函数!并且这个方法将保证如果对服务器的查询完成,您的代码将被执行!

var a = function(){
    var timer = setTimeout(function(){
        // ok your ajax query success of error whatever
        a();
        console.log(2)
    }, 1000);
}

a();

您必须将查询放在setTimeout中,并在查询完成后调用 a 函数或其他任何内容!

所以demo