Элемент в AJAX-выбранном HTML не может быть найден методом getElementbyID - PullRequest
2 голосов
/ 28 января 2011

Это потому, что он еще не инициализирован. Если я добавлю alert (), это позволит браузеру освободиться и инициализировать элемент. Тогда возникает вопрос: как я могу заставить его инициализировать элемент, не используя окно предупреждения?

Вот соответствующий код ...

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

AJAX_LoadResponseIntoElement (id, file) просто извлекает «файл» с запросом XMLHTTPRequest и загружает его во внутренний HTML-идентификатор id.

initPage () работает, пока не вызовет setContentHeight (), которая работает до этой точки:

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

Если я поставлю alert(document.getElementById('containerdiv')); перед этой строкой, то это говорит о том, что это NULL, хотя элемент «containerdiv» должен был быть загружен при самом первом вызове AJAX_LoadResponseIntoElement.

Если я поставлю ДВА копии alert(document.getElementById('containerdiv')); перед этой строкой, первая из них будет иметь значение NULL, а вторая - "[Object HTMLDivElement]".

Очевидно, что проблема в том, что «containerdiv» не инициализируется.

Итак, еще раз, вопрос в том, как я могу форсировать инициализацию этих элементов после выборки XMLHTTPRequest, без использования alert ()?

1 Ответ

4 голосов
/ 28 января 2011

Кажется, что 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);
    });
});
...