暂停计时器直到ajax完成

时间:2014-06-29 01:44:04

标签: jquery timer

我写了下面的计时器函数来检查我的数据库每x秒...我想要做的是暂停计时器,直到ajax完成,然后一旦完成再次启动它。

目前,它从x秒倒计时到0,当它达到0时,发生ajax检查。一旦达到0,计时器将重置为x秒,并继续运行直至停止。

我使用ajax将任意数量的图片加载到网页上,因此加载这些图片可能需要一些时间......这就是暂停的原因。

// start timer
$('#dtStart').on('click', function () {
    if(timerStatus != true) {
        var timerCount = $('#dtRefresh').val();
        $("#dtStart").addClass('hide');
        $("#dtStop").removeClass('hide');
    }

    function countdown(count) {             
        if(timerStatus != true) {
            timerStatus = true;
            timerId = setInterval(function() {
                count--;
                $("#dtTimer").html(count);
                if(count == 0) {
                    $("#dtTimer").html(count);
                    count = timerCount;

                    $.ajax({
                        type: 'post',
                        url: '/process/p_realtime_screenshots.php',
                        data: { ss_id : $("#slider .slides-content:eq("+(slider.count - 1)+")").data('id') },
                        dataType : 'json'
                    }).done(function (response) {

                        if (response.success)
                        {                                   
                            //add new screenshots
                            $.each( response.screenshots, function( index, value )
                            {                                       
                                //add the slide
                                slider.addSlide('screenshot added here');                   

                                //correct the count
                                $(".slide-total-slides").text(" of "+slider.count);

                            });

                            //stop playing slider if it is and auto go to last slide added
                            $('#slider').flexslider("stop");
                            $('#slider').flexslider(slider.count - 1);

                        }

                    });

                }

            }, 1000);
        }
    }
    countdown(timerCount);    
});

1 个答案:

答案 0 :(得分:0)

您可以使用clearInterval()在AJAX请求开始时停止计时器,然后在success事件中再次启动计时器:

$.ajax({
    ...
    beforeSend:function(){ clearInterval(timerId);}
    success : function(){ /* Start timer again here  */}
    ...
});