Zoeken…


Een verzoek indienen bij Flash

De klassen URLRequest en URLLoader werken samen om verzoeken van Flash aan externe bronnen in te dienen. De URLRequest definieert informatie over de aanvraag, bijvoorbeeld de aanvraaginstantie en het type aanvraagmethode, en de URLLoader verwijst hiernaar om de daadwerkelijke aanvraag uit te voeren en een manier te bieden om een melding te ontvangen wanneer een antwoord van de bron wordt ontvangen.

Voorbeeld:

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

Variabelen toevoegen aan uw verzoek

Met de klasse URLVariables kunt u gegevens definiëren die samen met een URLRequest moeten worden verzonden.

Voorbeeld:

var variables:URLVariables = new URLVariables();

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

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

U kunt de aanvraag verzenden via een URLLoader of de aanvraag-URL openen met de variabelen in de querystring met behulp van navigateToURL .

De HTTP-methode wijzigen (GET, POST, PUT, enz.)

De klasse URLRequestMethod bevat constanten voor de verschillende verzoektypen die u kunt maken. Deze constanten moeten worden toegewezen aan de method eigenschap van URLRequest :

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

Merk op dat alleen GET en POST beschikbaar zijn buiten de AIR-runtime.

Mijn reactiegegevens zijn altijd nul, wat betekent "asynchroon"?

Wanneer Flash een verzoek indient voor gegevens van een externe bron, is die bewerking asynchroon . De meest elementaire verklaring van wat dit betekent is dat de gegevens "op de achtergrond" worden geladen en de gebeurtenishandler activeren die u aan Event.COMPLETE toewijst wanneer deze worden ontvangen. Dit kan op elk moment tijdens de levensduur van uw toepassing gebeuren.

Uw gegevens ZULLEN NIET direct beschikbaar zijn nadat u load() op uw URLLoader . U moet een gebeurtenislistener voor Event.COMPLETE en communiceren met de reactie daar.

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.

Je kunt dit niet omzeilen met kleine trucs zoals setTimeout of iets dergelijks:

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

Cross-domein verzoeken

Flash laadt geen gegevens van een ander domein dan het domein waarop uw toepassing wordt uitgevoerd, tenzij dat domein een XML-crossdomain-beleid heeft in de root van het domein (bijvoorbeeld http://somedomain.com/crossdomain.xml ) of ergens dat u kan targeten met Security.loadPolicyFile() . In het bestand crossdomain.xml kunt u domeinen opgeven die uw server om gegevens van een Flash-toepassing kunnen vragen.

Voorbeeld van het meest toegestane crossdomain.xml:

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

Merk op dat dit voorbeeld niet moet worden gebruikt in productieomgevingen , gebruik een beperktere instantie.

Een restrictiever specifiek crossdomain.xml ziet er bijvoorbeeld als volgt uit:

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

Middelen:



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow