2012-07-08 67 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也不會釋放這些元素資源)。希望這篇文章能夠拯救別人同樣的痛苦\挫敗感......