getElementbyID找不到AJAX获取的HTML中的元素

时间:2011-01-28 10:35:56

标签: ajax initialization getelementbyid

这是因为它还没有初始化。如果我输入alert(),它允许释放浏览器并初始化元素。那么,问题是如何在不使用警报框的情况下强制它初始化元素?

以下是相关代码......

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

AJAX_LoadResponseIntoElement(id,file)只是使用XMLHTTPRequest获取“file”并将其加载到id的innerHTML中。

initPage()一直有效,直到它调用setContentHeight(),直到这一点为止:

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

如果我在此行之前放置alert(document.getElementById('containerdiv'));,它表示它为NULL,即使第一次调用AJAX_LoadResponseIntoElement应该加载“containerdiv”元素。

如果我在此行之前放置两个alert(document.getElementById('containerdiv'));副本,则第一个副本表示NULL,第二个表示“[Object HTMLDivElement]”。

显然,这只是“containerdiv”未被初始化的问题。

所以,再一次,问题是如何在不使用alert()的情况下强制在XMLHTTPRequest获取后初始化这些元素?

1 个答案:

答案 0 :(得分: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);
    });
});