window.onload = function(){
getStruct(); // подгружает DOM элементы через ajax и добавляет на страницу
openStruct(); // функция работает с подгруженной структурой
}
как сделать, чтобы openStruct() выполнялась только после полной отработки getStruct(), т.е. когда структура уже подгружена ?
также openStruct() содержит цикл,
for(var i in aux){
edClass(aux[i]);
где edClass() тоже подгружает структуру, как сделать так, чтобы цикл продолжал свое действие, только после полной отработки edClass(), те
получаем в цикле edClass(1) - цикл ждет когда функция отработает и только потом меняет аргумент и запускает edClass(2) и тд
Спустя 34 минуты, 9 секунд (28.09.2010 - 10:45) Joker написал(а):
Т.к. кризис еще только начал кончатся наш форум не успел нанять экстрасенсов, поэтому просим вас продемонстрировать код функций: getStruct(); и openStruct();
Спустя 7 минут, 41 секунда (28.09.2010 - 10:53) Slays написал(а):
да они впринципе могут содержать что угодно, мне лишь важно узнать, как указать одной функции, чтоб она выполнялась только по завершению другой, и тоже самое с циклами, как сделать так, чтобы цикл каждый раз ждал полного выполнение вызываемой функции
Спустя 8 минут, 26 секунд (28.09.2010 - 11:01) Joker написал(а):
Цитата (Slays @ 28.09.2010 - 12:53) |
да они впринципе могут содержать что угодно, мне лишь важно узнать, как указать одной функции, чтоб она выполнялась только по завершению другой, |
так всегда и происходит, и не как иначе.
Спустя 12 минут, 9 секунд (28.09.2010 - 11:14) ZSH написал(а):
window.onload = function(){
getStruct(); // подгружает DOM элементы через ajax и добавляет на страницу
openStruct(); // функция работает с подгруженной структурой
}
вот отсюда убираем вызов функции openStruct().
А в функции getStruct() , после того как получен ответ от сервера и сделаны все нужные операции с ответом, делаем вызов openStruct()
Спустя 21 минута, 34 секунды (28.09.2010 - 11:35) Slays написал(а):
не, такое не получится, ладно ща попробую модель поподробней расписать =)
Если в двух словах, то суть такая: берем id из куки, строим дочерние элементы родителя с данным id, после чего берем следующий id, строим его дочерние элементы и тд.
window.onload = function(){
getStruct('0'); // подгружает родительский DOM элемент через ajax и добавляет на страницу
openStruct();
}
function openStruct(){
// достает элементы из куки и передает в edClass, но цикл не дожидается полного выполнения edClass, из-за чего node не может найти элемент с заданным id, еще не построен в DOM
if(get_cookie('c_openStruct')){
var openStruct = get_cookie('c_openStruct');
var aux = openStruct.split(',');
aux.pop();
for(var i in aux){
edClass(aux[i]);
}
}
}
function edClass(id){
var node = document.getElementById(id);
// какие-то операции c node
getStruct(id); // строит дочерние элементы для node
}
function getStruct(id){
jQuery.ajax({
type: "POST",
url: "файл",
data: "id=" + id,
success: function(struct){
$("#container").html(struct);
// получаем дочерние элементы и строим их, если openStruct() записать сюда, то будет бесконечный цикл, т.к. в каждом getStruct будет полностью перебираться цикл из openStruct() который опять же вызывает getStruct
}
});
}
Если в двух словах, то суть такая: берем id из куки, строим дочерние элементы родителя с данным id, после чего берем следующий id, строим его дочерние элементы и тд.
Спустя 10 часов, 25 минут, 48 секунд (28.09.2010 - 22:01) linker написал(а):
Ну реализуй в getStruct() синхронный AJAX-запрос вместо асинхронного.
_____________
если помог, не скупись на карму =)