Sök…


Gör en förfrågan från Flash

URLRequest och URLLoader klasserna arbetar tillsammans för att göra förfrågningar från Flash till externa resurser. URLRequest definierar information om begäran, t.ex. förfrågningsorganet och typ av förfrågningsmetod, och URLLoader refererar till detta för att utföra den faktiska begäran och ger ett sätt att bli meddelad när ett svar tas emot från resursen.

Exempel:

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

Lägga till variabler till din begäran

I klassen URLVariables kan du definiera data som ska skickas tillsammans med en URLRequest .

Exempel:

var variables:URLVariables = new URLVariables();

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

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

Du kan antingen skicka förfrågan via en URLLoader eller öppna förfrågningsadressen med variablerna bifogade i frågesträngen med navigateToURL .

Ändra HTTP-metoden (GET, POST, PUT, etc)

URLRequestMethod klassen innehåller konstanter för de olika förfrågningstyper du kan skapa. Dessa konstanter är tilldelas URLRequest s method egenskap:

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

Observera att endast GET och POST är tillgängliga utanför AIR-körtiden.

Min svardata är alltid noll, vad betyder "asynkron"?

När Flash gör en begäran om data från en extern källa, är den operationen asynkron . Den mest grundläggande förklaringen av vad detta betyder är att data laddas "i bakgrunden" och utlöser händelseshanteraren du tilldelar Event.COMPLETE när den Event.COMPLETE emot. Detta kan hända när som helst under din ansökan.

Dina data kommer INTE att finnas tillgängliga omedelbart efter att du har URLLoader load() på din URLLoader . Du måste bifoga en händelse lyssnare för Event.COMPLETE och interagera med svaret där.

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.

Du kan inte komma runt detta med några små trick som att använda setTimeout eller liknande:

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

Cross-domain-förfrågningar

Flash laddar inte data från en annan domän än den som din applikation kör om inte den domänen har en XML-korsdomänspolicy antingen i roten till domänen (t.ex. http://somedomain.com/crossdomain.xml ) eller någonstans som du kan rikta in sig med Security.loadPolicyFile() . Filen crossdomain.xml är där du kan ange domäner som kan be din server om data från ett Flash-program.

Exempel på det mest tillåtna korsdomänet.xml:

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

Observera att detta exempel inte ska användas i produktionsmiljöer , använd en mer restriktiv instans.

Ett mer restriktivt specifikt crossdomain.xml ser ut så här till exempel:

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

Resurser:



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow