Динамический DOM-элемент не выбран как lastChild - PullRequest
1 голос
/ 25 февраля 2011

У меня странная проблема, которая проявляется в Firefox (не проверялось, т. Е. И т. Д., Но, тем не менее, он нужен для работы в Firefox). Я использую Ajax для заполнения родительского div с div, содержащими информацию, возвращаемую из БД. На стороне сервера находится PHP с циклом while, который перебирает набор результатов и выводит каждый div.

Весь сценарий работает нормально и заполняет родительский div (#ID parent div = 'webses') различным количеством дочерних узлов, проблема у меня заключается в том, что когда я проверяю последний дочерний узел после получения нового набора из div через ajax lastChild сообщается как ранее заполненный lastChild.

Пример:

'# webses' имеет 4 childNodes (divs), последний childNode имеет идентификатор 'no4', затем я снова заполняю весь набор childNodes в #webses, добавив новый div с идентификатором 'no5', затем я запросю идентификатор последний потомок «немедленно» в конце функции, которая снова заполняет div, и lastChild возвращается как «no4». Затем я могу выполнить тот же запрос (когда функция будет завершена), чтобы проверить lastChild на #webses (через адресную строку браузера), и тогда вернется no5!

Вот пример кода, который демонстрирует проблему (используя предупреждение, чтобы показать значение идентификатора в lastChild):

function populateWebses() {

//populates parentNode DIV 'webses' with divs populated via AJAX
populateParentNodeViaAJAX();

alert(document.getElementById("webses").lastChild.id);
}

запрос на просмотр lastChild выполняется сразу после того, как DOM в «#webses» обновляется новыми childNodes, я думаю, это проблема, но почему?

Любая помощь высоко ценится.

Dan

1 Ответ

2 голосов
/ 25 февраля 2011

AJAX означает асинхронный Javascript.При выполнении оповещения метод populateParentNodeViaAJAX () еще не завершен, поэтому он возвращает «старое» значение.

Если вам нужно выполнить какую-либо операцию, которая зависит от того, что метод Ajaxзавершено, вам нужно использовать механизм обратного вызова (который вызывает функцию X только после завершения вызова Ajax).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...