Recherche…


Faire une demande à partir de Flash

Les classes URLRequest et URLLoader fonctionnent ensemble pour faire des demandes à partir de Flash vers des ressources externes. Le URLRequest définit des informations sur la demande , par exemple le corps de la demande et le type de méthode de demande, et les URLLoader références ceci pour effectuer la demande réelle et fournir un moyen de notification quand une réponse est reçue à partir de la ressource.

Exemple:

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.
}

Ajout de variables à votre demande

La classe URLVariables vous permet de définir des données à envoyer avec une URLRequest .

Exemple:

var variables:URLVariables = new URLVariables();

variables.prop = "hello";
variables.anotherProp = 10;

var request:URLRequest = new URLRequest('http://someservice.com');
request.data = variables;

Vous pouvez envoyer la demande via un URLLoader ou ouvrir l'URL de la demande avec les variables associées à la chaîne de requête à l'aide de navigateToURL .

Modifier la méthode HTTP (GET, POST, PUT, etc.)

La classe URLRequestMethod contient des constantes pour les différents types de requêtes que vous pouvez créer. Ces constantes doivent être allouées à la propriété de method URLRequest :

var request:URLRequest = new URLRequest('http://someservice.com');
request.method = URLRequestMethod.POST;

Notez que seuls GET et POST sont disponibles en dehors du moteur d'exécution AIR.

Mes données de réponse sont toujours nulles, que signifie "asynchrone"?

Lorsque Flash effectue une demande de données depuis une source externe, cette opération est asynchrone . L'explication la plus simple de ce que cela signifie, c'est que les données sont chargées "en arrière-plan" et déclenche le gestionnaire d'événements que vous Event.COMPLETE à Event.COMPLETE lorsqu'il est reçu. Cela peut arriver à n'importe quel moment de la vie de votre application.

Vos données ne seront PAS disponibles immédiatement après avoir appelé load() sur votre URLLoader . Vous devez joindre un écouteur d'événement pour Event.COMPLETE et interagir avec la réponse.

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.

Vous ne pouvez pas contourner cela avec de petites astuces comme l'utilisation de setTimeout ou similaire:

setTimeout(function() {
    trace(loader.data); // Will be null if the data hasn't finished loading
                        // after 1000ms (which you can't guarantee).
}, 1000);

Requêtes interdomaines

Flash ne chargera pas de données d'un domaine autre que celui sur lequel votre application s'exécute, à moins que ce domaine ne dispose d'une stratégie de crossdomain XML dans la racine du domaine (par exemple, http://somedomain.com/crossdomain.xml ) ou dans un emplacement que vous peut cibler avec Security.loadPolicyFile() . Le fichier crossdomain.xml est l'endroit où vous pouvez spécifier des domaines capables de demander à votre serveur des données provenant d'une application Flash.

Exemple du crossdomain.xml le plus permissif :

<?xml version="1.0" ?>
<cross-domain-policy>
  <allow-access-from domain="*"/>
  <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>

Notez que cet exemple ne doit pas être utilisé dans des environnements de production , utilisez une instance plus restrictive.

Un crossdomain.xml spécifique plus restrictif ressemblera à ceci par exemple:

<?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>

Ressources:



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow