这是因为它还没有初始化。如果我输入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获取后初始化这些元素?
答案 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);
});
});