我一直在大部分时间都面临以下问题,并且已经取得了绝对零的进展,所以我认为我会伸手去看看是否有人有一些想法(帮帮我!!!)。我目前正在将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次是由于我的愚蠢造成的。
我忘了添加,Chrome和FF没有显示相同的行为(当然) – JAMES 2012-07-08 03:37:03