javascript onload重置时间戳循环困境

时间:2012-05-25 09:56:51

标签: php javascript jquery html ajax

我通常使用VBA和MySQL开发,但我们的任务是创建一个实时仪表板,放在我办公室的屏幕上。为此,我使用PHP和javascript。仪表板包含两个主要部分,一个通过Google Analytics 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小时的谷歌没有回复任何有用的东西,我希望我可能会遗漏一些简单的东西。任何帮助将不胜感激,提前谢谢。

2 个答案:

答案 0 :(得分:2)

您需要将时间戳更新代码放在AJAX调用完成时运行的load()的回调函数中。在每个函数中也不需要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调用自己之后不能直接使用它们。您需要运行或调用依赖于回调函数本身内的时间戳的代码。

答案 1 :(得分: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);
});
相关问题