setInterval中的clearInterval,无法使用jquery和.post()来中断循环

时间:2012-04-23 12:57:18

标签: jquery ajax post clearinterval

我正在尝试在setInterval函数中调用clearInterval,它正在进行一些ajax获取,没有任何运气。

var nre = setInterval('checkit()',5000);
$(function() {
    checkit = function(){
        $.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function( data ) {
            if (data == 1) {
                $('#debug').html(data);
                window.clearInterval(nre);
            }

        });
    }
});

关键是,循环不会中断,尽管收到正数据。

我已经读过setInterval函数的异步操作可能是这里的问题。有没有更好的方法来解决它?

2 个答案:

答案 0 :(得分:6)

将所有内容移动到同一范围内,不要使用setInterval的字符串形式:

$(function() {
    var nre = setInterval(checkit, 5000);
    function checkit() {
        $.post("check.php", { login: "..." }, function( data ) {
            if (data === 1) {
                $('#debug').html(data);
                clearInterval(nre);
            }
        });
    }
});

答案 1 :(得分:2)

document.ready之外无法看到

checkit,因此请在setInterval内移动document.ready来电。

如果要为变量checkit分配匿名函数,则必须在分配变量后移动setInterval调用。

$(function() {
    var checkit = function(){
        $.post("check.php", { login: "<?php echo $_SESSION['login'];?>" }, function( data ) {
            if (data == 1) {
                $('#debug').html(data);
                window.clearInterval(nre);
            }

        });
    }
   var nre = setInterval(checkit,5000);
});

或者,如果声明该函数,则可以在函数声明之前调用setInterval

$(function() {
    var nre = setInterval(checkit, 5000);
    function checkit() {
        $.post("check.php", { login: "..." }, function( data ) {
            if (data == 1) {
                $('#debug').html(data);
                clearInterval(nre);
            }
        });
    }
});