Ricerca…


Fare una richiesta da Flash

Le classi URLRequest e URLLoader per rendere richieste da Flash a risorse esterne. URLRequest definisce le informazioni sulla richiesta, ad esempio il corpo della richiesta e il tipo di metodo di richiesta, e l' URLLoader riferimento a questa per eseguire la richiesta effettiva e fornire un mezzo per ricevere una notifica quando viene ricevuta una risposta dalla risorsa.

Esempio:

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

Aggiunta di variabili alla tua richiesta

La classe URLVariables consente di definire i dati da inviare insieme a un URLRequest .

Esempio:

var variables:URLVariables = new URLVariables();

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

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

È possibile inviare la richiesta tramite URLLoader o aprire l'URL della richiesta con le variabili allegate nella query querys utilizzando navigateToURL .

Modifica del metodo HTTP (GET, POST, PUT, ecc.)

La classe URLRequestMethod contiene costanti per i vari tipi di richieste che è possibile creare. Queste costanti devono essere allocate alla proprietà del method URLRequest :

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

Si noti che solo GET e POST sono disponibili al di fuori del runtime AIR.

I miei dati di risposta sono sempre nulli, cosa significa "asincrono"?

Quando Flash inoltra una richiesta di dati da un'origine esterna, quell'operazione è asincrona . La spiegazione più semplice di ciò che significa è che i dati vengono caricati "in background" e attivano il gestore eventi che si assegna a Event.COMPLETE quando viene ricevuto. Questo può accadere in qualsiasi momento della vita della tua applicazione.

I tuoi dati NON saranno disponibili immediatamente dopo aver chiamato load() sul tuo URLLoader . È necessario collegare un listener di eventi per Event.COMPLETE e interagire con la risposta c'è.

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.

Non puoi aggirare questo con qualche piccolo trucco come usare setTimeout o simili:

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

Richieste interdominio

Flash non caricherà i dati da un dominio diverso da quello su cui è in esecuzione l'applicazione, a meno che tale dominio non abbia una politica di dominio XML nella radice del dominio (ad esempio http://somedomain.com/crossdomain.xml ) o da qualche parte può targetizzare con Security.loadPolicyFile() . Il file crossdomain.xml è dove puoi specificare domini che sono in grado di chiedere dati al tuo server da un'applicazione Flash.

Esempio del crossdomain.xml più permissivo :

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

Nota che questo esempio non deve essere usato negli ambienti di produzione , usa un'istanza più restrittiva.

Ad esempio, un crossdomain.xml specifico più restrittivo sarà simile a questo:

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

risorse:



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow