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>
Código :
<?php
foreach ($_POST as $k=>$a){
echo '&'.$k.'='.$a.'queVieneDelServidor';
}
?>
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>