¿Quieres registrarte?

Sustituir LoadVars por flash.net en ActionScript 3

Por: Zah
28 de Enero del 2007
3769 de clabLevel
Otros artículos de Zah
18,929 visitas

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>

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas actionscript_3

Comentarios | Enviar un comentario
Perdon, y al igual me equivoco, pero no te falta un sendToURL para enviar los datos al php? Que en tu caso seria sendToURL(req).
O no haria falta esta instruccion?
Saludos,
Por: chanofankero_blog
Ya envío los datos aquí:

Código :

 ldr.load(req);

Saludos ;)
Por: Zah
Oye y en la otra pagina como resivo esos datos que estoy enviando
Por: Jose -blog
a Jose - blog:

En la otra pagina, si es PHP, los recibes con $_REQUEST. Por ejemplo, si enviaste una variable llamada pepe, la recibes en PHP como $_REQUEST['pepe']; Tal como si se tratase de un formulario HTML común y corriente. Saludos!
Por: SomeNick (stormvideogames
Hay que utilizar necesariamente vars:URLVariables ?
No funcionaría pasando directamente la variable a urlRequest.data de este modo:

var urlRequest:URLRequest = new URLRequest("phpSqlToXml_fotos.php");
urlRequest.data = id_marca;
urlRequest.method = URLRequestMethod.POST
var urlLoader:URLLoader = new URLLoader(urlRequest);
urlLoader.addEventListener("complete",readXml);
Gracias, un saludo.
Por: riestra
hola a todos! mi pregunta va por otro camino, aunque algo relacionado. Yo necesito hacer lo mismo, pero en mi caso es con actionScript 3 y con jsp.Sabeis alguien donde puedo encontrar informacion o algun tipo de ayuda que me pueda servir para empezar.
Muchas gracias a todos.
Por: illo_guay
Te explicas con el ojete, salao.
Por: Miguel-blog
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.