2012-07-08 56 views
1

我一直在大部分时间都面临以下问题,并且已经取得了绝对零的进展,所以我认为我会伸手去看看是否有人有一些想法(帮帮我!!!)。我目前正在将jQuery 1.7.2与IE9结合使用,并且正在调用一个简单的$ .ajax调用,它只是简单地检索一些HTML。该HTML随后插入一个div如下:jQuery 1.7.2 IE9 ajax调用未清除丢弃的元素

$("#viewContent").html(content);

完全相关的jQuery代码如下所示:

var request = $.ajax({ 
    url: loadUrl, 
    type: "GET", 
    cache: false, 
    data: {command: "loadView", recordid: contextId}, 
    dataType: "html", 
    error: function (xhr, ajaxOptions, thrownError) { 
     getViewManager().setMode("ERROR"); 
     handleError(xhr.status, thrownError); 
     $("#viewContent").parent().removeClass("ajaxLoading"); 
    }   
}); 
request.done(onLoadViewSuccess); 

var onLoadViewSuccess = function(content) { 
    $("#viewContent").parent().removeClass("ajaxLoading"); 
    for(var i=0;i<100;i++) { 
     $("#viewContent").html(content);  
    }    
    content = null;  
} 

现在,作为对这个问题,你会发现我已经插内容100次,for循环仅用于夸大攀登内存(通过IE的Drip内存分析器观察),并且(随着IE保留的DOM节点总数)攀升。内容是不是一个问题,因为我有一个静态空字符串替换它和它的onLoadViewSuccess 函数中同样的事情:

var onLoadViewSuccess = function(content) { 
    $("#viewContent").parent().removeClass("ajaxLoading"); 
    for(var i=0;i<100;i++) { 
     $("#viewContent").html("<div/>"); 
    }    
    content = null;  
} 

即每一滴Ajax调用后稳步攀升将展示100个新的DOM节点记忆。现在,为什么这似乎被什么东西了Ajax调用,如果我调用相同的方法在初始页面加载:

$(document).ready(function() {onLoadViewSuccess("<div/>")});

我没有看到相同的行为(即调用HTML(” < div/>“)for循环中的每次迭代都正确地清除IE9中被替换的DOM节点,而不是创建100个新节点,并将它们全部保存在内存中......我已经回顾了几个IE和jQuery的ajax功能,但唯一接近的话题似乎与较早的IE版本有关,后者在之前的jQuery版本中已经得到解决......

我怀疑我错过了一些基本的东西,因为这似乎是这样一个琐碎的用例,通常当我无法通过谷歌找到任何类似的主题时,它的10倍中有9次是由于我的愚蠢造成的。

+0

我忘了添加,Chrome和FF没有显示相同的行为(当然) – JAMES 2012-07-08 03:37:03

回答

0

所以我相信我已经得到了这个问题...底部消除一个痛苦的过程之后,原来IE不清理与我定义的特定CSS类相关的元素:

.shadow { 
border-collapse: separate; 
-moz-box-shadow: 2px 2px 6px 3px #777; 
-webkit-box-shadow: 2px 2px 6px 3px #777; 
box-shadow: #666 0px 2px 4px; 
**behavior: url(/btms/resources/css/PIE.htc);** 
position: relative; 
} 

行为值是问题(不再使用,但在我最初开发应用程序以支持IE 8时无意中留下了 - 具有讽刺意味的是,PIE旨在为IE 8添加CSS3支持,但在这种情况下以某种方式关联了一个IE 9识别回覆对任何与该类相关的元素的阻止,即使在通过jQuery删除之后IE也不会释放这些元素资源)。希望这篇文章能够拯救别人同样的痛苦\挫败感......