2

私は通常、VBA と MySQL を使用して開発を行っていますが、オフィスの画面に表示されるライブ ダッシュボードの作成を任されています。このために、私は PHP と JavaScript を使用しています。ダッシュボードには 2 つの主要なセクションがあり、1 つは Google アナリティクス API を介してウェブサイトのトラフィック データを呼び出し、もう 1 つは内部 DB から販売データを呼び出します。

ダッシュボードの Web ページから以下のコードを使用して呼び出している個別のモジュールに PHP で書かれた個別の半分があり、ループを使用して各モジュールを 10 秒ごとに個別に更新します。問題は、各モジュールが最後にロードされてから秒単位でカウントアップする画面に2つのタイマーを含めたいことです。次のコードを使用して、現在の時間で変数をリセットしてこれを容易にします各ドキュメントがロードされたとき。

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);

私の問題は、モジュールが更新されたときではなく、ループが実行されたときにタイムスタンプ変数が 10 秒ごとにリセットされることです。これまでのところ、Google の 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 に答える