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 回答