ActionScript 3
サーバーからのデータの送受信
サーチ…
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
クラスには、さまざまなリクエストタイプの定数が含まれています。これらの定数は、 URLRequest
のmethod
プロパティに割り当てられます。
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>
リソース: