ActionScript 3
Senden und Empfangen von Daten von Servern
Suche…
Anforderung von Flash
Die URLRequest
und URLLoader
Klassen arbeiten zusammen, um Anforderungen von Flash an externe Ressourcen zu stellen. Die URLRequest
definiert Informationen über die Anforderung, z. B. den Anforderungshauptteil und den Anforderungsmethodentyp, und der URLLoader
verweist darauf, um die tatsächliche Anforderung auszuführen und eine Benachrichtigung bereitzustellen, wenn eine Antwort von der Ressource empfangen wird.
Beispiel:
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.
}
Hinzufügen von Variablen zu Ihrer Anfrage
Mit der URLVariables
Klasse können Sie Daten definieren, die zusammen mit einer URLRequest
gesendet werden URLRequest
.
Beispiel:
var variables:URLVariables = new URLVariables();
variables.prop = "hello";
variables.anotherProp = 10;
var request:URLRequest = new URLRequest('http://someservice.com');
request.data = variables;
Sie können entweder die Anfrage über einen schicken URLLoader
oder die Anfrage - URL mit dem in der Abfragezeichenfolgeflag mit beiliegenden Variablen öffnen navigateToURL
.
Ändern der HTTP-Methode (GET, POST, PUT usw.)
Die URLRequestMethod
Klasse enthält Konstanten für die verschiedenen Anforderungstypen, die Sie URLRequestMethod
können. Diese Konstanten werden werden , um zugewiesen URLRequest
‚s method
Eigenschaft:
var request:URLRequest = new URLRequest('http://someservice.com');
request.method = URLRequestMethod.POST;
Beachten Sie, dass nur
GET
undPOST
außerhalb der AIR-Laufzeitumgebung verfügbar sind.
Meine Antwortdaten sind immer null. Was bedeutet "asynchron"?
Wenn Flash Daten von einer externen Quelle anfordert, ist dieser Vorgang asynchron . Die grundlegendste Erklärung dafür ist, dass die Daten "im Hintergrund" Event.COMPLETE
und den Event-Handler Event.COMPLETE
Sie Event.COMPLETE
beim Empfang Event.COMPLETE
. Dies kann zu jeder Zeit während der Lebensdauer Ihrer Anwendung passieren.
Ihre Daten stehen NICHT unmittelbar nach dem Aufruf von load()
auf Ihrem URLLoader
. Sie müssen einen Event-Listener für Event.COMPLETE
und mit der Antwort dort interagieren.
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.
Mit kleinen Tricks wie setTimeout
oder ähnlichem kann man das nicht setTimeout
:
setTimeout(function() {
trace(loader.data); // Will be null if the data hasn't finished loading
// after 1000ms (which you can't guarantee).
}, 1000);
Domainübergreifende Anforderungen
Flash lädt keine Daten von einer anderen Domäne als der, in der Ihre Anwendung ausgeführt wird, es sei denn, diese Domäne hat eine XML-Crossdomain-Richtlinie, entweder im Stammverzeichnis der Domäne (z. B. http://somedomain.com/crossdomain.xml
) oder an einem anderen Ort kann mit Security.loadPolicyFile()
zielen. In der crossdomain.xml-Datei können Sie Domänen angeben, die Ihren Server nach Daten aus einer Flash-Anwendung fragen können.
Beispiel für die permissivste crossdomain.xml:
<?xml version="1.0" ?>
<cross-domain-policy>
<allow-access-from domain="*"/>
<allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>
Beachten Sie, dass dieses Beispiel nicht in Produktionsumgebungen verwendet werden sollte. Verwenden Sie eine restriktivere Instanz.
Eine restriktivere spezifische crossdomain.xml sieht beispielsweise so aus:
<?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>
Ressourcen: