2013-07-24 59 views
0

我有一個ajax請求,每5秒使用setInterval刷新頁面。setInterval定時器內的Javascript setInterval增加

在那個ajax請求中,如果條件爲真,我有另一個setInterval函數每半秒閃爍一次。

會發生什麼似乎在初始ajax調用後正常工作。但是,每5秒刷新一次ajax刷新,我的閃爍功能定時器就會減半,從而使速度加倍。

任何幫助將不勝感激,謝謝!

下面是代碼:

$(document).ready(function() { 
    var refreshRate = 5000; 
    var autoRefresh = setInterval(
     function() // Call out to get the time 
     { 
      $.ajax({ 
      type: 'GET', 
      success: function(data){ 
       document.getElementById('data').innerHTML=data; 

       var blink = setInterval (function() { 
        var blink_cell = $("#blink_div").html(); 
        if (blink_cell > 0) { 
        $("#blink_div").toggleClass("blink"); 
        } else { 
        $("#blink_div").addClass("invisible"); 
        } 
       },500); 

      } // end success 
     }); // end ajax call 
    }, refreshRate);// end check 
    }); // end ready 
+0

您還沒有停止老'setInterval',所以每次調用這個時候你會更頻繁地閃爍。 – Barmar

+0

會使用clearInterval完成嗎?到底在哪? – user2499241

+0

如果已經有一個正在運行,請不要啓動新的計時器。 – Barmar

回答

1

是關心你的變量的作用域和啓動一個新的前清除閃爍INTERVALL。

$(document).ready(function() { 
    var refreshRate = 5000; 
    var blink = -1; 
    var autoRefresh = setInterval(
     function() // Call out to get the time 
     { 
      $.ajax({ 
      type: 'GET', 
      success: function(data){ 
       document.getElementById('data').innerHTML=data; 
       if(blink>-1) clearInterval(blink); 
       blink = setInterval (function() { 
        var blink_cell = $("#blink_div").html(); 
        if (blink_cell > 0) { 
        $("#blink_div").toggleClass("blink"); 
        } else { 
        $("#blink_div").addClass("invisible"); 
        } 
       },500); 

      } // end success 
     }); // end ajax call 
    }, refreshRate);// end check 
    }); // end ready 
+0

謝謝,這正是我一直在尋找的。很有幫助!看起來比我預想的要容易。 – user2499241

0
$(document).ready(function() { 

    var _url = ''; // Put your URL here. 
    var _checkServerTime = 5000; 
    var _blinkTime = 500; 

    function _blink() { 
    // Do something here. 
    var condition = true; // Put condition here. 
    if (condition) setTimeout(_blink, _blinkTime); 
    } 

    function _handleData(data) { 
    $('#data').html(data); 
    _blink(); 
    } 

    function _checkServer() { 
    $.get(_url, _handleData); 
    } 

    setInterval(_checkServer, _checkServerTime); 

}); 
+0

感謝您的幫助!這似乎重新編寫了一些我不反對的代碼。我只是在協同工作,所以目前可能不太理想 – user2499241

+0

沒問題;最主要的是用setTimeout更改setInterval。 – jgroenen