2011-03-20 48 views
1

我加載一個iframe中以$阿賈克斯():的jQuery/JavaScript的 - 用Ajax加載的iframe減慢

$("#iframe_wrapper").each(function(){ 
    $.ajax({ 
    type: "post", 
    url: "http://site.com", 
    data: { action: 'get_the_iframe' }, 
    context: this, 
    success: function(html){ 
     $(this).html(html); 
     $(this).show(); 
     $('#theiframe').load(function(){ 
     // do stuff with the iframe... 
     }); 
    } 
    }); 
}); 

的iframe是一個被調用函數中,如果$ _ POST [ '行動' ]是「get_the_iframe」:

<iframe id="theiframe" name="theiframe" src="http://site.com/page/"></iframe> 

它的工作原理,但問題是,瀏覽器似乎顯示整個網頁很慢,好像在等待的iframe頁面上顯示的全部內容前加載,這是不應該發生的,因爲它是通過ajax完成的。這正是我試圖避免...

任何想法有什麼不對嗎?

回答

1

我認爲關鍵的答案就是,或者更具體地說,當執行阿賈克斯後您的jQuery的片段是由瀏覽器中運行。

我懷疑jQuery代碼加載頁面的某個時候發生完整的頁面加載之前。也許你的瀏覽器不支持來自同一個域的異步加載..很長一段時間,IE就是這種情況。所以,瀏覽器開始加載和處理iframe與其他正常(外部)頁面正在執行的請求有些同步。

如果不是這種情況下,還嘗試將啓動在文檔準備好處理程序阿賈克斯後的代碼。 另外,請檢查其他瀏覽器,以查看問題是否全面發生。

1

爲什麼你看到的,這是因爲iframe是阻塞因素,特別是在IE的原因。 IFrames是在瀏覽器中創建的最昂貴的元素,它也會在創建JavaScript時阻止JavaScript的執行。還有關於IFrame的資源阻止規則。如果您的頁面中有CSS文件,則在瀏覽器(IE)或Firefox中收到每個CSS文件的響應之前,IFrame纔會加載,所有IFrame資源都將被阻止,直到收到主頁上所有資源的響應。

只是作爲一個例子,我有一個標準的微調控制,每當我做AJAX調用服務器,將顯示正在運行的蛇(給用戶的一些反饋某些事情正在發生)。我還在身體級別創建了IFrame元素,以覆蓋頁面上的所有下拉元素,以防止IE6/7出血。在某些時候,我注意到我的網絡服務電話在IE中慢了兩倍,然後他們在FF中。經過一番調查後,我意識到創建IFrame元素會阻止瀏覽器中的所有內容,包括從服務器接收響應的代碼。

我不認爲有解決方法,除非不使用IFrames ...