【问题标题】:jQuery 1.7.2 \IE9 ajax Invocation Not Clearing Discarded ElementsjQuery 1.7.2 \IE9 ajax 调用不清除丢弃的元素
【发布时间】:2012-07-08 03:26:37
【问题描述】:

我一天中的大部分时间都在与以下问题作斗争,并且取得的进展绝对为零,所以我想我会伸出手来看看是否有人有一些想法(帮助!!!)。我目前正在将 jQuery 1.7.2 与 IE9 结合使用,并且正在调用一个简单的 $.ajax 调用,它只是检索一些 HTML。随后将 HTML 插入到 div 中,如下所示:

$("#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 memory profiler 观察到)爬升(连同总数由 IE 保留的 DOM 节点)。内容不是问题,因为我用静态空字符串替换了它,它在 onLoadViewSuccess 中做同样的事情 功能:

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

即Drip 会在每次 ajax 调用后显示 100 个新的 DOM 节点并稳步攀升内存。现在,如果我在初始页面加载时调用相同的方法,为什么这似乎与 ajax 调用有关:

$(document).ready(function() {onLoadViewSuccess("&lt;div/&gt;")});

我没有看到相同的行为(即,在 for 循环中调用 html("

") 每次迭代都会正确清除 IE9 中被替换的 DOM 节点,而不是创建 100 个新节点并将它们全部保留在内存...我已经查看了几个报告的 IE 和 jQuery 的 ajax 功能问题,但唯一接近的主题似乎与旧 IE 版本相关,这些问题已在以前版本的 jQuery 中得到解决...

我怀疑我遗漏了一些基本的东西,因为这似乎是一个微不足道的用例,通常当我无法通过谷歌找到任何类似的主题时,10 次中有 9 次是由于我的愚蠢行为。 ..

【问题讨论】:

  • 我忘了补充,Chrome 和 FF 没有表现出相同的行为(当然)

标签: jquery internet-explorer-9


【解决方案1】:

所以我相信我已经找到了问题的根源......经过痛苦的消除过程,事实证明 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 也无法释放这些元素资源)。希望这篇文章能拯救其他人同样的痛苦\沮丧......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2011-02-27
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    • 1970-01-01
    相关资源
    最近更新 更多