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移動します。setIntervaldocument.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 に答える