6

Web アプリケーションが新しいデータをチェックできるように、バックグラウンドで jQuery を「ハートビート」として使用して AJAX 呼び出しを行いたいと考えています。たとえば、10 秒ごと。

setInterval()Xミリ秒ごとに呼び出しを行うメソッドを呼び出すために使用できることを他の投稿で見ました。

しかし、AJAX 呼び出しに 10 秒以上かかるとどうなりますか? 最後のリクエストを完了させたいのですが、すでに進行中のリクエストがあるときに別の呼び出しを開始したくありません。これにより、同じ情報がページに 2 回配置される可能性があります。

元のAJAX呼び出しがまだ完了していない可能性がある場合に、単に「10秒ごと」ではなく、元のAJAX呼び出しが完了するのを待つメソッドにこれを実装する方法は何ですか。

4

3 に答える 3

11

ajax 成功関数から別のタイムアウトを設定してみてください。

function poll() {
    setTimeout( function() {
        $.ajax(.......).success( function(data) {
            poll();  //call your function again after successfully calling the first time.
        });
    }, 10000);
}
于 2012-12-06T17:34:31.093 に答える
6

を使用する代わりに、AJAX 完了コールバックを呼び出して、前の呼び出しが終了してから 10 秒後に各呼び出しを開始setIntervalますsetTimeout()

于 2012-12-06T17:31:46.557 に答える
0

setInterval を使用する代わりに、要求時間を計算し (通常は秒単位の UNIX タイムスタンプを使用)、サーバー側で 10 秒間setTimeoutの残り時間を使用するため、ユーザーごとに ping 時間 (またはサイトのビジネス)

function heartbeat(){
  $.ajax({
    'url': '/where/',
    'success': function(data){
       setTimeout(heartbeat, parseInt(data) * 1000);
    }
  });
}
heartbeat(); // initialize it

サーバー側では(PHPのように)、あなたはそうするでしょう

<?php
// do your stuff
echo (time() - (int)$time_requested) + 10; // it will vary per user, so if it takes 2 second, it will be 12, if it returns imediately, returns 10 
于 2012-12-06T17:33:08.523 に答える