1

我正在尝试在 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 函数的异步操作可能是这里的问题。有没有更好的方法来解决它?

4

2 回答 2

7

将所有内容移动到同一范围内,并且不要使用以下字符串形式setInterval

$(function() {
    var nre = setInterval(checkit, 5000);
    function checkit() {
        $.post("check.php", { login: "..." }, function( data ) {
            if (data === 1) {
                $('#debug').html(data);
                clearInterval(nre);
            }
        });
    }
});
于 2012-04-23T13:06:46.520 回答
2

checkit 在外部不可见,document.ready因此将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);
            }
        });
    }
});
于 2012-04-23T13:06:55.390 回答