5

投稿された新しいメッセージをフェッチするために、毎秒ajax呼び出しを実行する小さなチャットボックスウィジェットを作成しました。問題は、メモリリークが発生していることです。開いてから約15分後に、ブラウザ(Firefox)がクラッシュします。

私は比較的初心者なので、おそらく私です。何かを見逃したか、変数の設定を解除していないと確信しています。

var chat = {}
chat.fetchMessages = function() {
    $.ajax({
        url: '/chat_ajax.php',
        type: 'post',
        data: { method: 'fetch'},
        success : function(data) {
            $('#chat .messages').html(data);
            $("#chat").scrollTop($("#chat")[0].scrollHeight);
        }
    });
}
chat.interval = setInterval(chat.fetchMessages, 1000);
chat.fetchMessages();

誰かが私の(基本的な)コードを一瞥して、メモリリークが発生している場所と私が間違っていることを見つけることができるかどうかを確認できますか?いくつかの変数などの設定を解除する必要がありますか?

どうもありがとう!

4

1 に答える 1

5

setInterval()ajaxと一緒に使用しないでください。そうしないと、リクエストの同期が維持されません。代わりに使用setTimeout()してロジックを保留し、コールバックでsetTimeout()再帰的に開始します。complete

例。

$(DoMyAjax); // start your ajax on DOM ready
function DoMyAjax() {
   $.ajax({ 
      complete: function() {
          // your logic here
          setTimeout(DoMyAjax, 1000);
      }
   });
}
于 2013-03-14T16:00:42.347 に答える