Cristalab

Sustituir LoadVars por flash.net en ActionScript 3

Por: Zah + 28.01.2007

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>

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 Guiño
Por: Zah
Oye y en la otra pagina como resivo esos datos que estoy enviando
Por: Jose -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.