2017-11-18 129 views
1

我有一個jQuery自動刷新我的數據。我每60秒/ 1分鐘運行一次。jQuery根據當前休息時間每分鐘刷新一次

setInterval(function() 
{ 
    //if every 60 seconds based on current time (count the rest of second from current time) then run the AJAX. 
    $.ajax(
    { 
     url: "chkProfile.php", 
     type: "POST", 
     data: 
     { 
     }, 
     dataType: "JSON", 
     success: function (jsonStr) 
     { 
     } 
    }) 
},60000); 

,現在我想,當我隨時手動刷新我的網頁,例子中,我在十二時20分40秒和我們知道的秒其餘20然後運行AJAX。

目前如果我在12點20分四十秒,然後它會運行在十二時21分40秒

阿賈克斯我要的是,如果我在12點20分四十秒,那麼它應該在12時21分00秒

+0

豈不是服務器負載更好,如果每個人都賺不到,在同一時間要求嗎? – charlietfl

+0

有時,我需要刷新它,由於一些修補代碼/任何技術問題。因此,當我再次打開頁面時,它將根據第二個當前時間的其餘時間每分鐘刷新一次。 –

+0

應該很簡單,可以使用日期獲取當前時間,並使用setTimeout在下一個整分鐘處開始setInterval – charlietfl

回答

1

簡單的解決方案運行AJAX:

你可以檢查它,如果每一秒第二個是0 AJAX必須運行。 嘗試此:

setInterval(function() 
{ 
    var second = parseInt((new Date().getTime()/1000) % 60); 
    if(second === 0) { 
     $.ajax({ 
       url: "chkProfile.php", 
       type: "POST", 
       data:{}, 
       dataType: "JSON", 
       success: function (jsonStr){} 
      }); 
     } 
},1000); // or less than 1 sec 

優化的解決方案:

第一計算秒是如何保持到下一分鐘,並設置間隔每60分鐘。

// define fetch data function 
    var fetchData = function(){ 
     $.ajax({ 
      url: "chkProfile.php", 
      type: "POST", 
      data:{}, 
      dataType: "JSON", 
      success: function (jsonStr){} 
     }); 
    } 

    // begin when dom is ready 
    $(document).ready(function(){ 
     fetchData(); // run fetchData(); here if you want to ajax at first load time 
     // get remain time to next minute 
     var remainTime = 60 - parseInt((new Date().getTime()/1000) % 60); 
     setTimeout(function(){ 
     fetchData(); 
     // redo every minute 
     setInterval(fetchData, 60000); 
     }, remainTime*1000) 
    }) 

片段爲沒有AJAX例如:

// define fetch data function 
 
var fetchData = function() { 
 
    document.write(new Date()) 
 
} 
 

 
// begin when dom is ready 
 
$(document).ready(function() { 
 
    fetchData(); // run fetchData(); here if you want to ajax at first load time 
 
    // get remain time to next minute 
 
    var remainTime = 60 - parseInt((new Date().getTime()/1000) % 60); 
 
    setTimeout(function() { 
 
    fetchData(); 
 
    // redo every minute 
 
    setInterval(fetchData, 60000); 
 
    }, remainTime * 1000) 
 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

真棒,問題如何保持頁面加載時第一次加載ajax函數? –

+0

我仍然使用代碼中的簡單解決方案,可以嗎? –

+0

@HiDayurieDave因爲這些優化的解決方案是'優化解決方案'。你必須阻止你的ajax代碼到像第二個解決方案那樣的功能,然後在第一次加載時運行它。 –