在一天的大部分时间里,我一直在努力解决以下问题,并且取得的进展绝对为零,所以我想我会伸出手来看看是否有人有一些想法(帮助!!!)。我目前正在将 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 观察到)爬升(以及 DOM 节点的总数由 IE 保留)。内容不是问题,因为我用静态空字符串替换了它,它在 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("<div/>") 每次迭代都正确清除了 IE9 中被替换的 DOM 节点,而不是创建 100 个新节点并将它们全部保存在内存中。 .我已经查看了几个报告的 IE 和 jQuery 的 ajax 功能问题,但唯一接近的主题似乎与旧 IE 版本有关,这些问题已在以前版本的 jQuery 中得到解决......
我怀疑我错过了一些基本的东西,因为这似乎是一个微不足道的用例,通常当我无法通过谷歌找到任何类似的主题时,10 次中有 9 次是由于我的愚蠢行为......