Szukaj…


Składanie wniosku z Flasha

Klasy URLRequest i URLLoader współpracują ze sobą, aby wysyłać żądania z Flasha do zasobów zewnętrznych. URLRequest definiuje informacje o żądaniu, np. Treść żądania i typ metody żądania, a URLLoader odwołuje się do tego, aby wykonać rzeczywiste żądanie i zapewnić sposób powiadamiania, gdy odpowiedź zostanie otrzymana z zasobu.

Przykład:

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

Dodawanie zmiennych do twojego żądania

Klasa URLVariables pozwala definiować dane, które mają być wysyłane wraz z URLRequest .

Przykład:

var variables:URLVariables = new URLVariables();

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

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

Możesz albo wysłać żądanie przez URLLoader albo otworzyć URL żądania ze zmiennymi dołączonymi do kwerendy za pomocą navigateToURL .

Zmiana metody HTTP (GET, POST, PUT itp.)

Klasa URLRequestMethod zawiera stałe dla różnych typów żądań, które możesz wykonać. Te stałe należy przypisać do właściwości method URLRequest :

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

Należy pamiętać, że tylko GET i POST są dostępne poza środowiskiem wykonawczym AIR.

Moje dane odpowiedzi są zawsze zerowe, co oznacza „asynchroniczny”?

Gdy Flash wysyła żądanie danych z zewnętrznego źródła, operacja jest asynchroniczna . Najbardziej podstawowym wyjaśnieniem tego, co to oznacza, jest to, że dane Event.COMPLETE „w tle” i uruchamiają procedurę obsługi zdarzeń przypisaną do Event.COMPLETE po ich otrzymaniu. Może się to zdarzyć w dowolnym momencie życia aplikacji.

Twoje dane NIE BĘDĄ dostępne natychmiast po wywołaniu load() w URLLoader . Musisz dołączyć detektor zdarzeń dla Event.COMPLETE i interakcji z tam odpowiedzi.

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.

Nie można tego obejść za pomocą małych sztuczek, takich jak użycie setTimeout lub podobnego:

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

Żądania między domenami

Flash nie będzie ładował danych z domeny innej niż ta, na której działa twoja aplikacja, chyba że domena ma zasady crossdomain XML w katalogu głównym domeny (np. http://somedomain.com/crossdomain.xml ) lub w innym miejscu można celować za pomocą Security.loadPolicyFile() . Plik crossdomain.xml umożliwia określenie domen, które mogą prosić serwer o dane z aplikacji Flash.

Przykład najbardziej liberalnej crossdomain.xml:

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

Uwaga: tego przykładu nie należy używać w środowiskach produkcyjnych , należy użyć bardziej restrykcyjnej instancji.

Bardziej restrykcyjny plik crossdomain.xml będzie wyglądał następująco:

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

Zasoby:



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow