清除计时器 - JavaScript

时间:2011-03-04 11:05:44

标签: javascript timer

我有问题,我似乎无法停止计时器......事实上它加速了!

var number = 0;
var timer;
function get_data( url ){
    number++;
    $('#requests').html( number );
    $.ajax({ 
        type: 'POST', url: './includes/ajaxGetData.php', data: 'url=' + encodeURIComponent(url), cache: false, timeout: 10000,
        error : function(){ 
            timer = window.setTimeout( get_data( url ), 2000 );
        },
        success: function(html){ 
            if( html.substr(0,12) == '<!-- die -->' ) {
                $("#result").html('<p>Complete...</p>' + html );
                $('#requests').html('');
                clearTimeout(timer);
            }else{
                $("#result").html(html);
                timer = window.setTimeout( get_data( url ), 2000 );
            }
        }                           
    });
}
get_data( 'http://example.com' );

任何人都可以看到我出错的地方吗?

2 个答案:

答案 0 :(得分:2)

timer = window.setTimeout( get_data( url ), 2000 );

调用get_data 并为此调用的结果创建超时。请按照以下方式使用:

timer = window.setTimeout(function () { get_data(url) }, 2000);

答案 1 :(得分:0)

加速来自你成功的if else中的setTimeout,似乎总是如此。

尝试使用html评论选择

$(html).match(/<!--.*?-->/g));

或在你的情况下

$(html).match(/<!-- die -->/g));

考虑如果覆盖已经设置的Timer

会发生什么
timer = window.setTimeout( get_data( url ), 2000 );

清楚它是因为你设置了一个新的,否则“旧的”将开火

clearTimeout(timer);
timer = window.setTimeout( get_data( url ), 2000 );