« API de FlashPaper | Inicio | PrimalScript 3.1 Public Beta »

LoadVars que carga un XML

Antes de continuar con la serie de "tutoriales" sobre ActionScript 2.0, y aunque está claro que no debería publicarlo ahora, sin todavía haber visto un poco más en profundidad los fundamentos del lenguaje, quería postear esta clase, que he escrito la semana pasada para un proyecto en el que estoy trabajando.

El escenario es el siguiente:

Necesito enviar el "login" y "password" que el usuario introduce a un script en php, que una vez ha identificado al usuario, devuelve un XML con el contenido de los menús de la aplicación para el perfiel de ese usuario.

¿Cómo hacerlo?. La primera parte está clara. Utilizando la clase LoadVars, puedo enviar los datos necesarios a servidor, gracias al método sendAndLoad. Dicho método recoge la respuesta del servidor (que suele ser del tipo "variable1=valor1&variable2=valor2....." de manera que en el objeto destino de esa petición se generan las propiedades recibidas con los valores recibidos.

Pero ¿y si necesito recoger de servidor un XML?. Pues es muy fácil. Asignando lo que se recibe de servidor a un objeto XML. ¿Quieres saber cómo?

Muy sencillo:

import net.designnation.menus.*; /** * @class es.designnation.menus.LVXML * @author Cesar Tardaguila * @version 1.0.0.0 * @description Convierte el resultado de un LoadVars en un XMLMenusAll */ class es.designnation.menus.LVXML extends LoadVars{ private var datos:Object; private var url:String; public var retorno; public var ref; private var method:String; private var devolucion; private var concat:Boolean; function LVXML(datosp:Object, urlp:String, method, retornop){ datos = new Object(); datos = datosp; url = urlp; retorno = retornop; ref = referencia; method = method; init(); }; private function init(){ for (var k in datos){ this[k] = datos[k]; } }; public function enviarRecibir(){ sendAndLoad(url, retorno, method); }; }

Bien, pues esta clase recibe como parámetros (por orden):

1.- Un objeto con los datos que se van a enviar a servidor.

2.- La url del script a la que enviar, y que contestará con un xml.

3.- El método ("GET", "POST").

4.- La referencia al objeto xml al que se va a asignar el resultado.

Por tanto, en primer lugar se crean las propiedades que se reciben en el objeto parámetro, y se les asigna el valor correspondiente, se hace la petición a servidor, y una vez recibida respuesta, se asigna ésta al XML, de modo que se lanzará el método onLoad de dicho XML automáticamente.

Veamos un ejemplo:

var parametros = new Object(); parametros["login"] = loginp; parametros["pass"] = passp; var miXML:XML = new XML(); var miLoadVars:LVXML = new LVXML(parametros, "http://www.design-nation.net/scripts/testLV.php","POST", miXML); miLoadVars.enviarRecibir();

Bien, pues al cargarse el XML, se lanzará el método onLoad de miXML.

Comentarios

muy bueno!!

Si queremos recibir xml quizás sería mejor utilizar la clase XML que tiene, igual que loadVars, los métodos send(), sendAndLoad() y load(). El hecho que se trate de la clase XML no implica que tengamos que cargar archivos xml directamente, sino que podemos llamar a un php, asp o lo que sea que devuelva un xml.

Saludos

Efectivamente, podría haberse construido un xml con el nombre de usuario y el password, y llamando al método sendAndLoad, enviar dicho xml a un script php o lo que sea, y que éste devolviera un xml.

Pero en este caso, me encontraba con que tenía que enviar esos datos a un servlet que está preparado para recibir datos por post, y devolver datos por xml. Por circunstancias del proyecto, el código fuente de ese servlet no podía modificarse,por lo que no había otra forma de resolverlo.

Y el hecho de que el servlet estuviera preparado así, es porque la aplicación está pensada para soportar hasta 10.000 conexiones concurrentes, y alguien juzgó que era más eficaz que hubiera la menor carga de proceso posible en servidor.

De todas formas, este es un claro ejemplo de que siempre hay más de una forma de hacer las cosas....