Comunidad de diseño web y desarrollo en internet

Sustituir LoadVars por flash.net en ActionScript 3

En ActionScript 2, si queremos cargar datos de cualquier medio externo, tenemos los métodos load de las distintas clases (XML, MovieClipLoader, LoadVars...) que nos piden como parámetro un valor String con la URL que vamos a cargar.

En Actionscript 3 esto ha cambiado y ahora todas las clases que pueden cargar datos de medios externos nos piden como parámetro un mucho más potente URLRequest, cuya principal ventaja es que en la misma consulta podemos enviar variables por el método que queramos (POST o GET), una característica particularmente útil para webservices o para pasar otras variables con la clase FileReference.

Para enviar y recuperar variables (Como LoadVars), se usa la clase URLVariables.
Por ejemplo, si queremos abrir una URL enviándole una variable por el método POST tendremos que usar el método flash.net.navigateToURL, que abre la ventana que hemos pedido en la propiedad url, con las variables en formato URLVariables de la propiedad data, y con el método de la propiedad method de nuestro URLRequest:

Ejemplo MXML en Flex 2.0

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
   <mx:Script>
      <![CDATA[
         import flash.net.*
         private function enviar():void {
            var req:URLRequest=new URLRequest("archivo.php");
            req.method=URLRequestMethod.POST;
            var vars:URLVariables=new URLVariables;
            vars.txt=txt.text;
            req.data=vars;
            navigateToURL(req,"_blank");
         }
      ]]>
   </mx:Script>
   <mx:TextInput x="10" y="10" id="txt"/>
   <mx:Button x="10" y="40" label="Enviar" click="{enviar()}"/>
</mx:Application>

Si queremos procesar y recuperar las variables que hemos enviado, tendremos que usar la llamada al método load de un URLLoader y encargarnos de que el servidor devuelva las variables en este formato:
&variable1=valor1&variable2=valor2&variable3=valor3

Para probar, podemos escribir algo como esto en php:

Código :

<?php
   foreach ($_POST as $k=>$a){
      echo '&'.$k.'='.$a.'queVieneDelServidor';
   }
?>

Y en Flex:

Código :

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
   <mx:Script>
      <![CDATA[
         import flash.net.*
         import flash.events.*
         private function enviar():void {
            var req:URLRequest=new URLRequest("archivo.php");
            req.method=URLRequestMethod.POST;
            var vars:URLVariables=new URLVariables;
            vars.nombre=escape(nombre_txt.text);
            vars.apellidos=escape(apellidos_txt.text);
            vars.email=escape(email_txt.text);
            req.data=vars;
            var ldr:URLLoader=new URLLoader();
            ldr.load(req);
            ldr.addEventListener(Event.COMPLETE,onVarsLoaded);
         }
         private function onVarsLoaded(event:Event):void{
            var retVars:URLVariables = new URLVariables(event.target.data);
            nombre_lbl.text=unescape(retVars.nombre);
            apellidos_lbl.text=unescape(retVars.apellidos);
            email_lbl.text=unescape(retVars.email);
         }
      ]]>
   </mx:Script>
   <mx:Button x="10" y="128" label="Enviar" click="{enviar()}"/>
   <mx:Form x="10" y="10">
      <mx:FormItem label="Nombre">
         <mx:TextInput id="nombre_txt"/>
      </mx:FormItem>
      <mx:FormItem label="Apellidos">
         <mx:TextInput id="apellidos_txt"/>
      </mx:FormItem>
      <mx:FormItem label="Email">
         <mx:TextInput id="email_txt"/>
      </mx:FormItem>
   </mx:Form>
   <mx:Form x="10" y="158">
      <mx:FormItem label="Nombre">
         <mx:Label id="nombre_lbl"/>
      </mx:FormItem>
      <mx:FormItem label="Apellidos">
         <mx:Label id="apellidos_lbl"/>
      </mx:FormItem>
      <mx:FormItem label="Email">
         <mx:Label id="email_lbl"/>
      </mx:FormItem>
   </mx:Form>
</mx:Application>

¿Sabes SQL? ¿No-SQL? Aprende MySQL, PostgreSQL, MongoDB, Redis y más con el Curso Profesional de Bases de Datos que empieza el martes, en vivo.

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate