2012-05-25 25 views
2

我通常使用VBA和MySQL進行開發,但其任務是在我的辦公室周圍的屏幕上創建一個實時儀表板。爲此,我使用PHP和JavaScript。儀表板包含兩個主要部分,一個通過谷歌分析API調用網站流量數據,另一個調用來自內部數據庫的銷售數據。javascript onload重置時間戳循環困境

我用PHP編寫的獨立模塊中的獨立模塊,我使用下面的代碼從儀表板網頁調用,使用循環每10秒鐘獨立刷新一次模塊。問題是,我想在屏幕上包含兩個計時器,從上次加載每個模塊開始計數,我使用以下代碼嘗試重置當前時間的變量以便於實現當每個文件被加載。

var sales_string_unix = 0; 
var sales_string_google = 0; 

setInterval(function(){ 

    $(document).ready(function() { 
     $('#google_data').load('fetch_google_data.php'); 
     sales_string_unix = new Date().getTime(); 
    }); 

}, 10000); 

setInterval(function(){ 

    $(document).ready(function() { 
     $('#sales_data').load('fetch_sales_data.php'); 
     sales_string_google = new Date().getTime(); 
    }); 

}, 10000); 

我的問題是時間戳變量每十秒復位時循環執行,而不是當模塊被刷新。到目前爲止,6小時的Google沒有返回任何有用的信息,我希望我可能錯過了一些簡單的事情,這些事情就在我的經驗之外。任何幫助將不勝感激,在此先感謝。

回答

2

你需要把時間戳更新代碼中的回調函數load(),當AJAX調用完成時運行。您也不需要每個函數中的document.ready處理程序。試試這個:

var sales_string_unix = 0; 
var sales_string_google = 0; 

setInterval(function(){ 
    $('#google_data').load('fetch_google_data.php', function() { 
     sales_string_unix = new Date().getTime(); 
    });   
}, 10000); 

setInterval(function() { 
    $('#sales_data').load('fetch_sales_data.php', function() { 
     sales_string_google = new Date().getTime();); 
    }); 
}, 10000); 

注意然而,一旦AJAX調用完成這些變量纔會被填滿,所以AJAX調用自己之後,你不能直接使用它們。您需要運行或調用回調函數本身內依賴時間戳的代碼。

+0

Rory,那釘了它,謝謝一堆! –

0

您不需要$(文件)。就緒()函數中,只是把它一旦在外面

var sales_string_unix = 0; 
var sales_string_google = 0; 
$(document).ready(function() { 
    setInterval(function(){ 
     $('#google_data').load('fetch_google_data.php'); 
     sales_string_unix = new Date().getTime(); 
    }, 10000); 

    setInterval(function(){ 
     $('#sales_data').load('fetch_sales_data.php'); 
     sales_string_google = new Date().getTime(); 
    }, 10000); 
}); 
+0

Koesper和Rory一起你是對的,非常感謝! –