Hola amigos,
necesito vuestra ayuda porque llevo manejando el objeto LoadVars desde hace años, pero los Php's siempre los había hecho yo para que me devolvieran todas las variables de una sola vez. Ahora tengo que adaptar código Flash a las necesidades de varios php's con relacion entre ellos. El tema consiste en crear un arbol de carpetas y subcarpetas (sólo 1 nivel de profundidad). Tengo 2 php's, uno ohtiene las carpetas padre, y el otro las subcarpetas, de la siguiente forma:
Para las carpetas padre:
www.loquesea.com/handler.php?accion=obtenerPadres, que me devuelve:
n=2&idPadre1=1&nombre1=Tal&idPadre2=2&nombre2=Cual
Para las carpetas hija (concretamente las del idPadre=1):
www.loquesea.com/handler.php?accion=obtenerHijos&id=1, que me devuelve:
n=2&idHijo1=1&nombre1=Hijo1&idHijo2=2&nombre2=Hijo 2
Bien. En flash debo crear el arbol completo de una sola pasada. Para un código flash hecho por mí, tenía una sola llamada a un php que me devolvía toda la cadena de carpetas padre e hijas, y con bucles for me lo construía todo. Ahora en mitad de la ejecución del bucle que recorre a los padres, para cada uno (sea i) debo hacer una llamada al segundo ejemplo indicado como parámetro dicho i, y obtener las subcarpetas para anidar un bucle y recorrerlas, y todo de manera síncrona, es decir, que hasta que no se carguen las subcarpetas no puedo continuar. Ayer conseguí que se cargaran sólo las subcarpetas hijas del padre 1, pero el resto ya no se cargan, y no creo que sea por reutilizar la variable hijas para cada llamada, ya que se pisarían los valores y es lo que quiero:
var padres = new LoadVars();
var hijas = new LoadVars();
continuar = false;
padres.onLoad = comenzar;
hijas.onLoad = continuarEjecucion;
padres.sendAndLoad(loquesea);
function continuarEjecucion(){
continuar = true;
}
function comenzar(){
for(i=1;i<=padres.n;i++){
instrucciones de creacion de padres
hijas.sendAndLoad(loquesea);
while(!continuar);;
continuar = false; //para que a la siguiente pasada me tenga que volver a parar en el while hasta recibir las variables
for(j=1;j<=hijas.n;j++){
instrucciones para construir las hijas
}
}
}
Haciendo la depuración, cuando llamo por segunda vez a obtener las carpetas hija, ya no se vuelven a cargar más. He obviado los parámetros de las llamadas y demas instrucciones para que no os lieis porque están perfectamente construidas, lo que sé que está mal es la filosofía del while para forzar a sincronizar. Debe haber otra forma, y seguro que ahora os reis de lo fácil que es. No sé si se podrá definir un onLoad de las hijas para cada pasada del bucle, y hacer la costruccion de las hijas dentro de dicho onLoad, aun así no me convence porque si no se cargan de inmediato, el bucle de los padres habría continuado incrementando i, que es la variable más importante, y NADA deberá ejecutarse hasta que las hijas no estén cargadas. Tampoco he querido sustituir los bucles for por bucles while donde se incrementen las variables sólo cuando se hayan cargado los datos, porque no creo que flash tenga esa triste limitación.
Os agradecería muchísimo que me pudierais ayudar. Un gran saludo!!!