2011-10-26 43 views
0

データをモニタするためにjQplotを使用してグラフを表示しています。 グラフを保持するdivをリフレッシュするには、5秒ごとにajax呼び出しを呼び出します(下記のJavaScriptの抜粋を参照)。 サーバー上で、PHPスクリプトはデータベースからデータを取得します。 成功すると、JavaScriptのsetTimeout(ajax、5000)を使用して5秒後にajax呼び出しが再呼び出しされます。 エラー時に、エラーメッセージを表示する前にajax呼び出しをsetTimeout(ajax、5000)で10回試行します。 XHRは、約200回のリクエスト後にブラウザがクラッシュすることを認識します。 一時的な対策として、ブラウザがクラッシュするのを防ぐために、50回の繰り返し後にlocation.reload()が発行されます。 これは機能しますが、理想的な状況ではありません。 この問題の解決策があれば、非常に感謝しています。ajax divをリフレッシュするためのsettimeout

おかげに関して、JZB

function ajax() { 
    $.ajax({ 
    cache: false, 
    url: 'monitor.php', 
    data : { x: id }, 
    method: 'GET', 
    dataType: 'json', 
    success: onDataReceived, 
    error: onDataError 
    }); 

    function onDataReceived(series) { 
    $('#chartdiv_bar').html(''); 
    $.jqplot('chartdiv_bar', [series['initHits']], CreateOptions(series,'Inits')); 

    errorcount = 0; 
    setTimeout(ajax, 5000); 
    } 

    function onDataError(jqXHR, textStatus, errorThrown) { 
    errorcount++; 
    if (errorcount == 10) { 
     alert("No server response:\n\n" + textStatus + "\n" + errorThrown); 
    } else { 
     setTimeout(ajax, 5000); 
    } 
    } 
} 

答えて

1

あなたは再呼び出しアヤックス(しているので)良いかAJAX呼び出しに失敗した後、あなたは複数のタイマーを開始しています。これがあなたのブラウザがクラッシュする理由です。ここでは、タイマーに

if(t)  
clearTimeout(t); 
t = setTimeout(ajax, 5000); 

詳細:

あなたは現在のタイマをクリアしようと、あなたのコールバック関数のそれぞれに次のタイマ

var t; //global 

を開始したいことがありw3 school

+0

チップをありがとう。推奨されるようにclearTimeoutを使用しても問題は解決しません。 XHRの監視では、約200件のリクエストでブラウザがクラッシュするまでビルドリクエストが表示されます。 これらは、タイマーリクエストではなく、AJAXリクエストであり、ページをリロードしてクリアする以外の方法は考えられません。 ここでもまた、解決策の提案が非常に高く評価されています。 – user1014584

+0

ああ申し訳ありませんが動作しませんでした。あなたのコードからjqplot呼び出しを削除しようとしましたか?代わりにアラート文を使用することもできます。 jqplotの問題を排除するだけです。 – CW30Meters

0

jqplot呼び出しを提案通りに削除しましたが、問題はなくなりました。

明らかに、jqplotが原因で、jqPlotメモリリークを参照する多数のエントリが見つかりました。
私はjQuery 1.6.4を使用し、jqPlot Chartsバージョン1.0.0b2_r792をインストールしました。これはおそらくメモリリークの問題に対処しています。

はさらに、私は

$('#chartdiv_bar').empty(); 

$('#chartdiv_bar').html(''); 

を交換しご支援をいただき、ありがとうございます。

関連する問題