Hacer un sendAndLoad en Actionscript 3.0

Etiquetas: URLRequest URLVariables sendToURL URLLoader method load dataFormat

sendAndLoad permitía enviar información a un fichero externo (PHP, ASP o similar) y recibir después información de este. En AS3 ya no se puede utilizar esta función, pero en su lugar se puede utilizar el siguiente código (en el ejemplo envio dos numeros a un PHP, que los sumará y devolverá el resultado). El php puede ser como este:

  1.  
  2. <?php
  3. $numero1 = htmlentities($_POST[numero1]);
  4. $numero2 = htmlentities($_POST[numero2]);
  5. $suma = $numero1 + $numero2;
  6. echo "suma=" . $suma;
  7. ?>
  8.  

Y el Actionscript:

//Importo las clases necesarias
import flash.display.Sprite;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.sendToURL;

//Almaceno la url que vamos a cargar
var url:String = "http://www.esedeerre.com/ejemplos/as2php/intercambio/sumar.php";

//Creo las variables para enviar y recibir la informacion
var enviar:URLRequest = new URLRequest(url);
var recibir:URLLoader = new URLLoader();

//Creo la variable que va a ir dentro de enviar, con los campos que tiene que recibir el PHP.
//En este caso son numero1 y numero2
var variables:URLVariables = new URLVariables();
variables.numero1 = 7;
variables.numero2 = 10;

//Indico el método por el que se va a enviar la información.
enviar.method = URLRequestMethod.POST;

//Indico que voy a enviar variables dentro de la petición
enviar.data = variables;

//Indico el formato de la información que se va a recibir como respuesta
recibir.dataFormat = URLLoaderDataFormat.VARIABLES;

//Añado listeners a recibir, para un posible error y una respuesta.
recibir.addEventListener(Event.COMPLETE,Respuesta);
recibir.addEventListener(IOErrorEvent.IO_ERROR,HayError);

//Hago la petición al PHP
recibir.load(enviar);

//Funcion que se ejecuta al recibir una respuesta del PHP
function Respuesta(event:Event){
trace("El resultado es : " + recibir.data.suma);
}

//Función que se ejectuta cuando no se puede cargar el PHP
function HayError(event:IOErrorEvent):void {
trace("Error al cargar la url");
}

stop();

Comentarios:
Daniel dijo:
Gracias por el ejemplo .. muy util y facil de usar.. oye y como harias el php.. si no es mucha molestia =) gracias!
esedeerre dijo:

Buenas, he editado el post para añadir el código php.

Lo tienes al principio

Arrikitawn dijo:
Buenas, estoy un poco perdido con el AS3 pero si solo quisiera recibir una variable de un ASP dentro de mi formulario realizado en flash como lo tendría que hacer? ya no puedo utilizar el objeto LoadVars()por lo que he leido, me podrías hacer cinco céntimos? Gracias
esedeerre dijo:

@Arrikitawn

El ejemplo hace justo lo que necesitas, envia un par de variables a un fichero externo, en AS3. Cual es tú duda?

psycodelic dijo:
Yo tengo un problema con cargar variables de un PHP, el problema es ke solo puedo carga una. Este es el codigo: loader.addEventListener(Event.COMPLETE, mostrar); function mostrar(e:Event){ try{ var variables = new URLVariables(e.target.data); trace(variables.mensaje); //esta es la sgte variable, la ke no puedo cargar //solo puedo cargar una, en el PHP uso el caracter "&" //para las demas variables, pero aun asi, no puedo cargarla trace(variables.val); }catch(error:Error){ trace(e.target.data); } }
psycodelic dijo:
uups, sorry ke me salio todo junto
chris dijo:
ya intentenle tambien no sean huevones, ahi ya pusieron todo el codigo, como recivir,enviar varias variables es cosa de pensarle un poco, yo ando igual de perdido pero tambien casi casi quieren que les resuelva su chamba... noma..
Miguel dijo:
¡Me has salvao la vida!, gracias, después de todo As3 no es un infierno.
Ronald dijo:
Sos grande esedeerre, muxas gracias
Mike dijo:
Gracias! sos un idolo!
Gabriel dijo:
Si pongo trace, me muestra el dato en output de flash pero no en el swf... usè esto: //-- importamos las clases necesarias import flash.net.*; import flash.events.*; import flash.text.TextField; //-- creamos una instancia de URLLoader para info externa var loader:URLLoader=new URLLoader(); //-- tipo de info a recibir loader.dataFormat=URLLoaderDataFormat.VARIABLES; //-- cual es el archivo que cargaremos loader.load(new URLRequest("http://www.estelarisradio.net/mostrar.php")); //-- listener para cuando la carga este completa loader.addEventListener(Event.COMPLETE,carga); //-- funcion a ejecutarse function carga(event:Event) { var loader:URLLoader= URLLoader(event.target); //-- creamos el campo de texto donde se mostrara la info del php var texto:TextField=new TextField(); texto.text=String(loader.data.dato1); var texto2:TextField=new TextField(); texto.text=String(loader.data.dato2); texto.autoSize="left"; //-- mostramos el campo de texto addChild(texto); texto2.autoSize="left"; //-- mostramos el campo de texto addChild(texto2); } Pero a la hora de funcionar solo recupera la primera variable, què estoy haciendo mal? Gracias.
federico dijo:
Buenas! al utilizar la url del ejemplo el script funciona perfectamente pero al cambiar a la de mi localhost (var url:String = "http://localhost/WEB/FORMULARIO.php";) me tira el siguiente error Error: Error #2101: La cadena transmitida a URLVariables.decode() debe ser una cadena de consulta con formato URL codificado y pares nombre/valor. El php que yo utlizo es calcado al del ejemplo. Tengo instalado en mi ordenador lo siguiente: appserv-win32-2.5.4a. Alguien tiene idea de que puede pasar. Muchas Gracias
Mike dijo:
Hola gracias por ayudar, como hago esto si son muchas variables? //Hago la petición al PHP (esto es As3) recibir.load(enviar); //muestro el resultado (esto es PHP) echo "suma".$suma; /// es decir resultados de division, resta, etc al mismo tiempo... Como los recibo en as3, gracias o un ejemplo me serviria tambien gracias...
Federico dijo:
Muy bueno el tutorial. Super simple y entendible! A mi me dió el mismo error #2101 de formato de la cadena URL y lo solucioné cambiando "recibir.dataFormat=URLLoaderDataFormat.VARIABLES;" por "recibir.dataFormat=URLLoaderDataFormat.TEXT;"
Federico dijo:
Por alguna razón recibir.dataFormat = URLLoaderDataFormat.VARIABLES; devuelve un error en ambiente local pero no funciona en MAMP, pero recibir.dataFormat = URLLoaderDataFormat.TEXT; funciona perfecto en ambiente local pero no anda bien en MAMP. Recomiendo probar los dos si hay problemas de recepción de datos desde el php.
jonathan dijo:
e disculpa pero intente el codigo en AS 3.0 y no sale, no se si me podrias enviar el el php y el flv an disculpa me diero una tarea de quitsorty codigo secuencial y binario ******************************* * ----------------------------* * PROYECTO FINAL ALGORITMICA I* * ----------------------------* * * * ORDENAR: * * Quick Sort * * Insercion * * Burbuja * * * * BUSCAR: * * Secuencial * * Binario * * * * EXAMEN jueves 18/02/10 * * EXAMEN FINAL * ******************************* tengo que ordenar 10 letras cualquieras por los tres metodos en un solo trabajo con tres botones para ordenar y un boton para busca por favor aver si me ayudas con mi tarea
kevin dijo:
ayudame para que el ph funcione en appeserf
dimmu dijo:
hola manes kisiera k me ayuden en mi tares de diseño m tengo otras pero esas y las ago el php del ejemplo no me funca bn algien podria ayudar plsssssssssssssssssssssssssssssssssssssssssssssssssssss
wunjo dijo:
Muchas gracias, perfectamente entendible y aplicable.
fabian dijo:
Bien? tengo un problema, con el formato en que se devuelve el valor o las variables q necesito del PHP, si lo dejo tal cual está escrito aqui en el php. echo ?datos=? . $info; al momento de escribirlo. trace(?El resultado es : ? + recibir.data.datos); me sale ?undefined?, si lo coloco como se solia colocar con el estandar MIME, en ActionScript 2.0, en el php. echo ?&datos=? . $info; al momento de escribirlo. me da el siguiente Error: Error: Error #2101: La cadena transmitida a URLVariables.decode() debe ser una cadena de consulta con formato URL codificado y pares nombre/valor. at Error$/throwError() at flash.net::URLVariables/decode() at flash.net::URLVariables() at flash.net::URLLoader/onComplete() Estoy en proceso de trancisión hacia Asc 3, por lo que esto se me hace un poco confuso? Podria despejar mis dudas?? Favor escribir a mi correo: f_varga@hotmail.com Gracias?
vangercol dijo:
Bueno vamos a mirar si funciona, si llega a ser asi volvere a escribir y a felicitarte pero por lo que leo deberia funcionar :)
vangercol dijo:
BUeno pues perfecto, pero me aparece en salida undefined, creo que podria ser error del php. Como me podrian ayudar???
Leon dijo:
A mi tambien me sale undefined.... no es por huevon ni nada, pero en verdad ando trabado en esto... Agradeceria cualquier idea de por que creen que nos este saliendo "undefined". Saludos!
Leon dijo:
Si hago una prueba y hago un trace("El resultado es : " + recibir.data) me imprime el codigo de mi php. El resultado es : %0A%3C%3Fphp%0A%0A%24numero1%20=%20htmlentities%28%24%5FPOST%5Bnumero1%5D%29%3B%0A%0A%24numero2%20%3D%20htmlentities%28%24%5FPOST%5Bnumero2%5D%29%3B%0A%0A%24suma%20%3D%20%24numero1%20%20%20%24numero2%3B%0A%0Aecho%20%22suma%3D%22%20%2E%20%24suma%3B%0A%0A%3F%3E
leon dijo:
Claro esta que si le agrego el .suma me asle undefined.
Dechcaudron dijo:
Sale undefined...
Dechcaudron dijo:
Sale undefined...
alexzander escobar dijo:
Tengo un problema, estoy realizando envíar mail con flash pero Cuando hago la peticion al PHP recibir.load(enviar); ese enviar lo tengo como boton este es el código: import flash.display.Sprite; import flash.net.URLRequest;//Rescata URL import flash.net.URLLoader;//Carga de datos import flash.net.URLVariables;//Maneja variables import flash.net.sendToURL;//Exporta datos //URL DONDE SE VA A CARGAR LOS DATOS var url:String ="../Contactenos.php"; //VARIABLES PARA ENVIAR Y RECIBIR var enviodatos:URLRequest = new URLRequest(url); var recibodatos:URLLoader = new URLLoader(); //DATOS QUE SE VAN A CARGAR var datos:URLVariables = new URLVariables(); datos.nombre = nombre_txt.text; datos.email = email_txt.text; datos.mensaje = mensaje_txt.text; //DEFINO EL METODO DE ENVÍO enviodatos.method = URLRequestMethod.POST; //INDICO LAS VARIABLES A ENVIAR enviodatos.data = datos; //FORMATO DE LA INFORMACIÓN A RECIBIR recibodatos.dataFormat = URLLoaderDataFormat.VARIABLES; //LISTENER A RECIBIR, PARA MENSAJE DE RESPUESTA recibodatos.addEventListener(Event.COMPLETE,Respuesta); recibodatos.addEventListener(IOErrorEvent.IO_ERROR,HayError); //PETICION PHP DE ENVIO recibodatos.load(BtnEnviar); //FUNCION QUE ME EJECUTA LA RESPUESTA RECIBIDA DE PHP function Respuesta(event:Event) { trace(recibodatos.data.estado_txt); } //FUNCION DE ERROR EN LA CARGA A PHP function HayError(event:IOErrorEvent):void { trace("Error en la carga de datos"); } stop() Cuál es mi error: El sistema me muestra 1067: Implicit coercion of a value of type flash.display:SimpleButton to an urelated type flash.net:URLRequest Gracias por la ayuda que me puedan brindar...
Daniel Velez dijo:
hola, mira, tengo esto: unas fotos en un swf cada una en un fotograma. la descripcion de las fotos esta debajo del swf en un html. cuando cambio de foto cambia el html. debe conservarse el avance en el swf mostrando la foto actual, pero no es asi, como hago para que al cambiar a una nueva pagina el archivo swf conserve su estado pero cambie el texto en html??
luis arevalo dijo:
Hola estoy en el paso de as2 a as3, el gran problema que tengo es hacer las consultas a la base de datos. tienes algun ejemplo de eso?
Francisco dijo:
Hola, yo tambien con eso de "undefined". cuando lo probaba en local mediante "localhost" me salia lo de "undefined" en el resultado. hice un cambio en el codigo php de ejemplo y ya me sale todo bien: hay que cambiar estas dos lineas $numero1 = htmlentities($_POST[numero1]); $numero2 = htmlentities($_POST[numero2]); por: $numero1 = $_POST["numero1"]; $numero2 = $_POST["numero2"]; quizas esto se deba a la version php que tenga instalado cada servidor
Alex dijo:
he hecho todo ese ejemplo pero me muestra el codigo php en lugar los valores reales.
Okami dijo:
buenisimo viejo me sirvio al 100%
Dejar un comentario:
Tu nombre (obligatorio):

E-mail (obligatorio, no se mostrará):

Web: