【发布时间】: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("<div/>")});
我没有看到相同的行为(即,在 for 循环中调用 html("
") 每次迭代都会正确清除 IE9 中被替换的 DOM 节点,而不是创建 100 个新节点并将它们全部保留在内存...我已经查看了几个报告的 IE 和 jQuery 的 ajax 功能问题,但唯一接近的主题似乎与旧 IE 版本相关,这些问题已在以前版本的 jQuery 中得到解决...我怀疑我遗漏了一些基本的东西,因为这似乎是一个微不足道的用例,通常当我无法通过谷歌找到任何类似的主题时,10 次中有 9 次是由于我的愚蠢行为。 ..
【问题讨论】:
-
我忘了补充,Chrome 和 FF 没有表现出相同的行为(当然)
标签: jquery internet-explorer-9