2011-06-24 5 views
1

私はWebアプリケーションの特定の要素を5秒ごとに更新するためにajax呼び出しを使用しています。これを達成するためにsetInterval(refreshElements、5000)を使用しても問題はありませんでした。setTimoutを使用してユーザーのフォーカスに応じてリフレッシュタイマーを変更するときの問題

ここでは、ユーザーが実際にページにいるかどうかを考慮する必要があります。私は 'フォーカス'と 'ボケ'イベントを使用してこれを検出することができました。しかし、以下のコードは意図したとおりに動作します。ユーザーがページにいる場合は5秒ごとにrefreshElements()を呼び出すが、ユーザーがページにない場合は15秒ごとに呼び出されるようにする。

今は、ページを表示していない限り、タイマーがフリーズしているように見えます。私はFirebugでこの動作を確認しました。 GETコールは5秒ごとに呼び出されますが、別のタブに切り替えると、元のタブに戻るまでGETが呼び出されなくなります。何か案は?ここで

はコードです:

$(document).ready(function(){ 
var refreshinterval = 5000; 
var timer; 
$(window).bind("blur", function() { 
     refreshinterval = 15000; 
    }); 

$(window).bind("focus", function() { 
    refreshinterval = 5000; 
}); 

function refreshElements(){  

    clearTimeout(timer); 

    $.ajax({ 
     type: "GET", 
     dataType: 'json', 
     url: "refresh_url", 
     cache: false, 
     success: function(data){  
      // fill the desired page elements 
     } 
    }); 

    timer = setTimeout(refreshElements, refreshinterval); 
} 

refreshElements(); 
}); 
+0

bind()の代わりにlive()を使用して、それが何かを確認しようとしました – ryuutatsuo

+0

@ryuutatsuo live()を使用しようとしましたが、動作を変更しませんでした。なぜ私の古いsetInterval()が5秒ごとにトリガするのか分からないのですが、setTimeout()を使ってページを表示していなくても、タイマーはフォーカスなしでフリーズします。 –

答えて

1

それはFirebugのに問題でした。コードでより多くのテストを実行した後。私は自分のアプリが正しく動作していることに気づいた。ブラウザーウィンドウがフォーカスを失った場合、FirebugはGET要求のキャプチャを中止します。

Chromeでデベロッパーツールを試しましたが、ChromeがバックグラウンドにあってもGETリクエストをキャプチャし続けました。

また、Chrome Developer Toolsフレームでは、表示しているウェブページからフォーカスを削除できることに気付きました。

すべてのことで、啓発的な24時間です。私は将来誰かを助けることを願っています!

関連する問題