Comunidad de diseño web y desarrollo en internet online

XML y SendAndLoad

Citar            
MensajeEscrito el 30 Dic 2008 01:31 am
Llevo 4 horas buscando solución a mi problema, le pregunte a google y a cristalab, dentro de los foros de cristalab me he encontrado un par de personas que estan intentando lo mismo que yo, pero yo no consigo hacerlo funcionar. mi situacion es la siguiente:

Estoy generando un archivo XMLdinámico usando PHP para consultar una base de datos. Del lado de Flash estaba usando el metodo Load del objeto XML y funcionaba bastante bien. Para filtrar los resultados mandaba una variable en el url ejemplo:

Código :

XML.load(consulta.php?id=2);

donde id en el archivo PHP lo tomaba con $_GET['id'] y este me ayudaba a filtrar la consulta para despues generar el xml. Hasta aqui todo va bien. pero mi problema es que ahora quiero mandar la consulta SQL directamente desde FLASH y no quiero mandarlo desde el URL. Entonces he intentado usar sendAndLoad. primero intenté con el metodo sendAndLoad del objeto XML, pero al parecer la variable que mande tambien tiene que estar en formato de etiquetas y aqui no sé como debo interpretarlo del lado de PHP. Debido a esto he intentando con sendAndLoad del objeto LoadVars. algo como esto:

Código :

var xml:XML = new XML();
xml.contentType = "text/xml";
xml.ignoreWhite = true;
var lv:LoadVars = new LoadVars();

XML.onLoad = function(success){
      if(success){
         var nodes = this.firstChild.childNodes;
         trace(nodes.length);
      }   
      else{
            trace("no se pudo abrir el archivo");
      }
}


lv.sendAndLoad("http://.../query.php", xml, "POST");

Aqui tengo dos variables; una de tipo LoadVars y una XML, LoadVar lo uso para enviar y recibo en XML pero los datos no se guardan bien, es decir, no conserva la estructura, los childnodes son un relajo.
Entonces intenté lo siguiente: En el archivo PHP guardo toda la parte del xml en una variable y al final la mando imprimir con un echo algo como esto:

Código :

$miXML=<nodo1> .....</nodo1>
echo "cadena=" . $miXML;

Para despues en flash recibir cadena y con ese crear el objeto XML como sigue:

Código :

var xml:XML = new XML();
xml.contentType = "text/xml";
xml.ignoreWhite = true;
var lv:LoadVars = new LoadVars();
var rv:LoadVars = new LoadVars();

rv.onLoad = function(success){
      if(success){
         xml = new XML(this.cadena);
         //mas codigo

      }   
      else{
            trace("no se pudo abrir el archivo");
      }
}


lv.sendAndLoad("http://.../query.php", rv, "POST");


Pero el problema sigue sin resolverse, la variable XML toma valores maniacos sin orden ni estructura.

Si alguien me puede ayudar, si alguien tiene un ejemplo con codigo fuente tanto de PHP como de AS se lo agradeceré infinitamente

Por nodream

Claber

99 de clabLevel



 

chrome
Citar            
MensajeEscrito el 30 Dic 2008 11:21 am
En realidad puedes recibir y enviar desde un mismo objeto LoadVars, el PHP te devuelve la cadena que será el XML, dentro del onLoad construyex un objeto XML y lo parseas. De todas formas, si usas BD, hay otros métodos mas simples, incluso los pares de nombre/valor son mas efectivos y más fáciles, además de evitas el aburrido parseo firstChild.childNodes.firstChild.etc
Mírate otras opciones en http://www.flash-db.com/Tutorials/loading/

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 30 Dic 2008 05:09 pm
Gracias jorge. efectivamente lo único que me faltaba era eso del parseo. Al final el problema se solucionó como dices, desde el PHP mando la cadena

Código :

$cadena="<miXML>....</miXML>"


Y en flash recivo y parseo, esta funcion de parseXML no me la sabía pero fue la solución exacta a mi problema

Código :

lv.onLoad = function(success){
      if(success){
         var xml = new XML();
         xml.parseXML(this.cadena);  //<------ ESTA FUE LA LINEA CLAVE
         // mas codigo
      }   
}



Gracias por el dato.

Por nodream

Claber

99 de clabLevel



 

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.