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 y POST 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:



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow