使用jQuery .Get API和setTimeout时内存泄漏

时间:2011-01-21 19:53:14

标签: jquery ajax coldfusion

我正在使用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>

谢谢!

1 个答案:

答案 0 :(得分:1)

当load()函数释放dom元素时出现这种情况。这是IE特有的,解决方法是

document.getElementById("responsecontainer").innerHTML = $('#responsecontainer').load('alertchecking_Inner.cfm');

报告http://forum.jquery.com/topic/memory-leaks-with-ajax-calls