ActionScript 3
Enviando y recibiendo datos de servidores
Buscar..
Hacer una solicitud desde Flash
Las clases URLRequest
y URLLoader
trabajan juntas para realizar solicitudes de Flash a recursos externos. La URLRequest
define información sobre la solicitud, por ejemplo, el cuerpo de la solicitud y el tipo de método de solicitud, y el URLLoader
referencia a esto para realizar la solicitud real y proporcionar un medio de notificación cuando se recibe una respuesta del recurso.
Ejemplo:
var request:URLRequest = new URLRequest('http://stackoverflow.com');
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, responseReceived);
loader.load(request);
function responseReceived(event:Event):void {
trace(event.target.data); // or loader.data if you have reference to it in
// this scope.
}
Agregando variables a su solicitud
La clase URLVariables
permite definir los datos que se enviarán junto con una URLRequest
.
Ejemplo:
var variables:URLVariables = new URLVariables();
variables.prop = "hello";
variables.anotherProp = 10;
var request:URLRequest = new URLRequest('http://someservice.com');
request.data = variables;
Puede enviar la solicitud a través de un URLLoader
o abrir la URL de la solicitud con las variables adjuntas en la cadena de consulta mediante el comando navigateToURL
.
Alterar el método HTTP (GET, POST, PUT, etc.)
La clase URLRequestMethod
contiene constantes para los distintos tipos de solicitud que puede realizar. Estas constantes deben asignarse a la propiedad del method
URLRequest
:
var request:URLRequest = new URLRequest('http://someservice.com');
request.method = URLRequestMethod.POST;
Tenga en cuenta que solo
GET
yPOST
están disponibles fuera del tiempo de ejecución de AIR.
Mis datos de respuesta son siempre nulos, ¿qué significa "asíncrono"?
Cuando Flash realiza una solicitud de datos de una fuente externa, esa operación es asíncrona . La explicación más básica de lo que esto significa es que los datos se cargan "en segundo plano" y activan el controlador de eventos que asigna a Event.COMPLETE
cuando se recibe. Esto puede suceder en cualquier momento de la vida de su aplicación.
Sus datos NO estarán disponibles inmediatamente después de llamar a load()
en su URLLoader
. Debe adjuntar un detector de eventos para Event.COMPLETE
e interactuar con la respuesta allí.
var request:URLRequest = new URLRequest('http://someservice.com');
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, responseReceived);
loader.load(request);
trace(loader.data); // Will be null.
function responseReceived(event:Event):void {
trace(loader.data); // Will be populated with the server response.
}
trace(loader.data); // Will still be null.
No puedes evitar esto con pequeños trucos como usar setTimeout
o similar:
setTimeout(function() {
trace(loader.data); // Will be null if the data hasn't finished loading
// after 1000ms (which you can't guarantee).
}, 1000);
Peticiones de dominio cruzado
Flash no cargará datos de un dominio que no sea el que está ejecutando su aplicación a menos que ese dominio tenga una política de dominio cruzado XML ya sea en la raíz del dominio (por ejemplo, http://somedomain.com/crossdomain.xml
) o en algún lugar donde se encuentre puede apuntar con Security.loadPolicyFile()
. El archivo crossdomain.xml es donde puede especificar dominios que pueden solicitar datos a su servidor desde una aplicación Flash.
Ejemplo del crossdomain.xml más permisivo :
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
Tenga en cuenta que este ejemplo no debe utilizarse en entornos de producción , use una instancia más restrictiva.
Un crossdomain.xml específico más restrictivo se verá así, por ejemplo:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only" />
<allow-access-from domain="*.domain.com" to-ports="80,843,8011" />
<allow-access-from domain="123.123.123.123" to-ports="80,843,8011" />
</cross-domain-policy>
Recursos: