2014-02-14 72 views
3

如果系統時鐘在用戶計算機上看起來像這樣,例如,我正在考慮一個時鐘,它將刷新整整一分鐘。 11:08:00,它會刷新並11:09:00等AJAX jQuery - 每完整分鐘更新一次內容

我tryed到setInterval()

setInterval(function(){ 
    $.ajax({ 
     url: "../time.php", 
     context: document.body, 
     success: function(result){ 
      $('.time').html(result); 
     } 
    }) 
}, 60000); 

但它需要刷新頁面加載後的每一分鐘。

有沒有解決方法?

+0

變化60000 6000 – Merlin

+1

@Lorenzo不,那會是6秒。 – George

+1

對不起!沒有得到它 – Merlin

回答

3

試試這個代碼:

var interval = 0; 
function start(){ 
    setTimeout(function(){ 
     ajax_function(); 
     interval = 60; 
     setInterval(function(){ 
      ajax_function(); 
     }, interval * 1000); 
    }, interval * 1000);  
} 

function ajax_function(){ 
    $.ajax({ 
     url: "../time.php", 
     context: document.body, 
     success: function(result){ 
      $('.time').html(result); 
     } 
    }); 
} 

$(window).load(function(){ 
    var time = new Date(); 
    interval = 60 - time.getSeconds(); 
    if(interval==60) 
     interval = 0; 
    start(); 
}); 
+0

這是我尋找哥們你是偉大的 – arclite

+0

很高興我可以幫助... :) –

4

setInterval()不會立即調用它的函數,第一次在這種情況下運行的函數將在頁面加載後60秒。你可以進行以下修改,讓你正在尋找的結果是:在功能

  • 調用函數的AJAX請求儘快在頁面加載
  • 使用setTimeout()在成功函數

    • 廣場的.ajax(),而不是setInterval()圍繞整個事情。如果請求出錯,則setInterval()將繼續執行,但setTimeout()將不會再次執行,直到請求成功爲止。
    • 拆分結果,取秒數,如果結果與.time中的結果不同,則更改結果。這假定result就像11:08:00
    • 如果您希望在服務器返回該微小改變時承認一個字符串,你需要檢查它每秒
    function update(){ 
        $.ajax({ 
         url: "../time.php", 
         context: document.body, 
         success: function(result){ 
          var secondless = result.split(':'), $time = $('.time'); 
          secondless = secondless [0]+':'+secondless [1]; 
          $time.html(function(_,v){ 
           return secondless != v ? secondless : v 
          } 
          setTimeout(update, 1000); 
         } 
        }) 
    } 
    update(); 
    
  • +0

    這仍然是每60秒從頁面加載,而不是在每分鐘的變化。您也可能會在AJAX請求返回響應時引入錯誤。 –

    +0

    我完全被誤解了 - 奇怪的是,我如何更好地理解你寫的兩行,而不是實際問題中的整個描述。謝謝。 – George

    +0

    @AnthonyGrist編輯。 – George

    2
    var d = new Date(); 
    var n = d.getSeconds(); 
    while(n != 0){ 
        d = new Date(); 
        n = d.getSeconds(); 
        if(n == 0){ 
         setInterval(function(){ 
          $.ajax({ 
           url: "../time.php", 
           context: document.body, 
           success: function(result){ 
            $('.time').html(result); 
           } 
          }) 
         }, 60000); 
        } 
    } 
    
    +0

    你有什麼貼嗎?我沒有得到它。 – Jai

    +0

    只有當系統獲得一整分鐘時纔會調用ajax。例如: 當時間是10:10:59它不會啓動 時間是10:11:00它會啓動並且每一整分鐘都會被調用 – brunozrk

    +0

    'setTimeout(update,60000);'它是什麼?和哪裏?或者這是由於從另一個答案複製而來的。 – Jai

    2

    如果你想基於用戶系統時間在分鐘上精確運行你的函數,那麼你需要實例化Date對象並檢查getSeconds()的當前狀態,如果它等於0,那麼你正好在t他分鐘,如果不是,你需要從60中減去它的結果,然後將其傳遞給setTimeout,它將精確地在一分鐘內調用setInterval函數。

    原油例子;

    var time = new Date(); 
    var timeout = 0; 
    
    if (time.getSeconds() != 0) { 
        timeout = (60 - time.getSeconds()); 
    } 
    
    setTimeout(function(){ 
    
        setInterval(function(){ 
        $.ajax({ 
         url: "../time.php", 
         context: document.body, 
         success: function(result){ 
         $('.time').html(result); 
         } 
        })}, 60000); 
    
    }, timeout); 
    

    代碼高爾夫球手的替代示例;

    setTimeout(function(){ 
    
        setInterval(function(){ 
        $.ajax({ 
         url: "../time.php", 
         context: document.body, 
         success: function(result){ 
         $('.time').html(result); 
         } 
        })}, 60000); 
    
    }, (60 - new Date().getSeconds())); 
    
    0

    如果我正確undestood你,你可以檢查時鐘首次運行操作和使用seTimeoutsetInterval什麼時候的時鐘到達下一個hh:mm:00

    +0

    這是正確的:) – arclite

    1

    user2703250幾乎得到它的權利,請參閱編輯verison如下:

    var d = new Date(); 
    var n = d.getSeconds(); 
    while(n !== 0){ 
    d = new Date(); 
    n = d.getSeconds(); 
    if(n === 0){ dopage_update();} 
    } 
    
    function dopage_update(){ 
        $.ajax({ 
          url: "../time.php", 
          context: document.body, 
          success: function(result){ 
            $('.time').html(result); 
            setTimeout(function(){dopage_update();}, 60000); 
          } 
          }); 
         } 
    
    +0

    這是很好的腳本,但我認爲它會產生一個服務器負載 – arclite

    相關問題