clearInterval inside setInterval, unable to break loop, with jquery and .post()

PiotrC picture PiotrC · Apr 23, 2012 · Viewed 9.2k times · Source

I'm trying to call clearInterval inside setInterval function, which is doing some ajax fetching, without any luck.

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);
            }

        });
    }
});

The point is, that the loop wont break, although recieves positive data to do so.

I've read that async action of setInterval function might be the issue here. Is there a better way to solve it?

Answer

Alnitak picture Alnitak · Apr 23, 2012

Move everything inside the same scope, and don't use the string form of setInterval:

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