2

我通常使用 VBA 和 MySQL 进行开发,但我的任务是创建一个实时仪表板以放置在我办公室周围的屏幕上。为此,我使用 PHP 和 javascript。仪表板包含两个主要部分,一个通过谷歌分析 API 调用网站流量数据,另一个从我们的内部数据库调用销售数据。

我在单独的模块中用 PHP 编写了单独的两半,我使用仪表板网页下面的代码调用这些模块,使用循环每十秒独立刷新每个模块。问题是我想在屏幕上包含两个计时器,从最后一次加载每个模块开始以秒为单位向上计数,我正在使用以下代码尝试使用当前时间重置一个变量以促进这一点加载每个文档时。

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 小时没有返回任何有用的东西,我希望我可能遗漏了一些超出我经验的简单内容。任何帮助将不胜感激,在此先感谢。

4

2 回答 2

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 调用自身之后直接使用它们。您需要从回调函数本身运行或调用依赖于时间戳的代码。

于 2012-05-25T10:02:10.947 回答
0

您不需要函数中的 $(document).ready() ,只需将它放在外面一次

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);
});
于 2012-05-25T09:59:25.940 回答