サーチ…


Flashからのリクエスト

URLRequestクラスとURLLoaderクラスは連携して、Flashから外部リソースへのリクエストを作成します。 URLRequestはリクエストに関する情報(リクエストボディとリクエストメソッドのタイプ)を定義し、 URLLoaderこれを参照して実際のリクエストを実行し、リソースからレスポンスを受け取ったときに通知される手段を提供します。

例:

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

リクエストに変数を追加する

URLVariablesクラスを使用すると、送信するデータとURLRequestを定義できます。

例:

var variables:URLVariables = new URLVariables();

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

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

URLLoaderてリクエストを送信するか、 navigateToURLを使用してクエリ文字列に変数を添付してリクエストURLを開くことができます。

HTTPメソッド(GET、POST、PUTなど)を変更する

URLRequestMethodクラスには、さまざまなリクエストタイプの定数が含まれています。これらの定数は、 URLRequestmethodプロパティに割り当てられます。

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

AIRランタイムの外部では、 GETおよびPOSTのみが使用可能であることに注意してください。

私の応答データは常にnullですが、 "非同期"とはどういう意味ですか?

Flashが外部ソースからデータを要求するとき、その操作は非同期です。これが意味するものの最も基本的な説明は、データがバックグラウンドでロードされ、受信時にEvent.COMPLETEに割り当てるイベントハンドラをトリガすることです。これは、アプリケーションの存続期間のどの時点でも発生します。

あなたのデータはURLLoader load()を呼び出した直後は利用できませんEvent.COMPLETEイベントリスナーをアタッチし、そのリスナーと対話する必要があります。

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.

あなたはsetTimeoutなどのような小さなトリックでこれを回避することはできません:

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

ドメイン間のリクエスト

アプリケーションの実行中のドメイン以外のドメインからのデータはロードされません。ドメインのルートにXMLクロスドメインポリシー(たとえばhttp://somedomain.com/crossdomain.xml )があるか、 Security.loadPolicyFile()ターゲットできます。 crossdomain.xmlファイルでは、サーバーにFlashアプリケーションのデータを要求できるドメインを指定できます。

最も許容されるcrossdomain.xmlの例:

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

この例は本番環境では使用しないでください。より限定的なインスタンスを使用してください。

より限定的な特定のcrossdomain.xmlは、次のようになります。

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

リソース:



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow