2011-01-28 101 views
2

這是因爲它尚未初始化。如果我放入alert(),它允許瀏覽器被釋放並初始化元素。那麼問題是,我如何強制它不使用警告框來初始化元素?獲取AJAX的HTML中的元素無法通過getElementbyID找到

這裏的相關代碼...

$().ready(function() { AJAX_LoadResponseIntoElement ("mybody", "skin1.txt"); AJAX_LoadResponseIntoElement ("contentdiv", "index.txt"); initPage(); });

AJAX_LoadResponseIntoElement(ID,文件),只需取 「文件」 有一個XMLHttpRequest,並將其裝入ID的innerHTML。

initPage()的作品,直到它調用setContentHeight(),其工作直到這一點:

if (DOMheight > y_lbound) { document.getElementById('containerdiv').style.height = (DOMheight+container_ymod) + 'px'; }

如果我把alert(document.getElementById('containerdiv'));這條線之前,它說,它是NULL,即使「 containerdiv「元素應該首先被加載到AJAX_LoadResponseIntoElement。

如果我在此行之前放TWOalert(document.getElementById('containerdiv'));的副本,第一個表示NULL,第二個表示「[Object HTMLDivElement]」。

顯然,這只是「containerdiv」未初始化的問題。

因此,問題是如何在XMLHTTPRequest獲取這些元素後,如何強制這些元素的初始化,而不使用alert()?

回答

4

看來AJAX_LoadResponseIntoElement()是異步的,因爲它在內部使用XMLHTTPRequest。爲您解決問題的一種方法是修改功能,因此它需要一個回調函數的參數,當請求成功調用它:

function AJAX_LoadResponseIntoElement(elementId, fileName, callback) 
{ 
    // Issue XMLHTTPRequest and call 'callback' on success. 
} 

然後用修改後的功能是這樣的:

$(document).ready(function() { 
    AJAX_LoadResponseIntoElement("mybody", "skin1.txt", function() { 
     AJAX_LoadResponseIntoElement("contentdiv", "index.txt", initPage); 
    }); 
}); 
+0

那花我花了一個小時才弄清楚該怎麼做,但我得到了它的工作。如果你原諒我,我會在同一時間去哭,慶祝和抽菸......我即將放棄! – TimFoolery 2011-01-28 12:02:40

相關問題