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!!
Publicado por: Javi | Diciembre 9, 2003 10:16 PM
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
Publicado por: Xavi Beumala | Diciembre 13, 2003 02:20 PM
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....
Publicado por: ctarda | Diciembre 15, 2003 06:52 AM