我写了一个小聊天框小部件,它每秒运行一次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();
有人可以看一下我的(基本)代码,看看你是否能发现内存泄漏的位置,以及我做错了什么?我是否需要取消某些变量或其他内容?
非常感谢!
答案 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);
}
});
}