jQuery AJAX调用中的内存泄漏

时间:2013-03-14 15:56:27

标签: jquery ajax memory-leaks setinterval

我写了一个小聊天框小部件,它每秒运行一次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();

有人可以看一下我的(基本)代码,看看你是否能发现内存泄漏的位置,以及我做错了什么?我是否需要取消某些变量或其他内容?

非常感谢!

1 个答案:

答案 0 :(得分:5)

从不setInterval()与ajax一起使用,否则您的请求永远不会保持同步。请改用setTimeout(),然后等待您的逻辑,在setTimeout()回调中递归complete启动。

实施例

$(DoMyAjax); // start your ajax on DOM ready
function DoMyAjax() {
   $.ajax({ 
      complete: function() {
          // your logic here
          setTimeout(DoMyAjax, 1000);
      }
   });
}