我正在使用jQuery 1.4.4并使用.get API检查是否需要刷新页面上的数据。问题是下面的代码段中某处存在内存泄漏,我似乎无法找到。您会注意到我在这里做了很多可能无用的事情,例如删除和添加计时器,以便弄清楚发生了什么。我假设做.load导致了问题,但是在这一点上,.load根本不会经常发生,只有当来自.get的数据返回“true”时才会发生这种情况,这种情况非常罕见且不常见与使用Windows任务管理器看到的内存泄漏一致。有一点需要注意的是,这根本不会泄漏使用Firefox,似乎是IE特有的。我正在使用IE 8但不认为这很重要。
<script>
$(document).ready(function() {
function CheckAlerts() {
//Must tell Ajax not to cache results
$.ajaxSetup({ cache: false });
$.get("AjaxDataCheck/CheckForDataRefresh.cfm", { datacheck: "MyAlerts"},
function(data) {
if (data.indexOf("true") >= 0) {
$.ajaxSetup({ cache: false });
$('#responsecontainer').load('alertchecking_Inner.cfm');
//Clearing the timer and recreating may force gargage collection.
clearTimeout(CheckAlertsTimer);
delete CheckAlertsTimer;
CheckAlertsTimer = setTimeout(CheckAlerts,2000);
}
else
{
//Clearing the timer and recreating may force gargage collection.
clearTimeout(CheckAlertsTimer);
delete CheckAlertsTimer;
CheckAlertsTimer = setTimeout(CheckAlerts,2000);
}
});
CheckAlertsTimer = setTimeout(CheckAlerts,2000);
};
CheckAlerts()
});
</script>
谢谢!
答案 0 :(得分:1)
当load()函数释放dom元素时出现这种情况。这是IE特有的,解决方法是
document.getElementById("responsecontainer").innerHTML = $('#responsecontainer').load('alertchecking_Inner.cfm');
报告http://forum.jquery.com/topic/memory-leaks-with-ajax-calls。