AS 3でpostとgetでデータを提出する


AS 3でpostとgetでデータを提出する


ここでは主にas 3でURLRequest対像を用いてpostまたはgetデータをサーバに紹介する.
postはビッグデータ量のコミットに用いられ,getはビッグデータ量のコミットに用いられる.
as 3でデータをコミットするには:
1、testを新規作成します.fla、中にはボタン「submit」、2つのテキストボックス「txt 1」と「txt 2」があります.もう1つtestを新規作成します.asファイルflaはクラスをtestに向ける.as;
2、ファイル構造の配置が終わったら、ロジックを書き始めます.コミットされたデータを受信するurlを定義します.
var url:String = "http://localhost:2240/service.ashx";

3、データを格納するURLmariablesイメージを再構築し、2つのパラメータaaとbbを追加します(.netバックグラウンドでaaとbbの値が取得されます).txt 1はテキストボックスです.
var _data:URLVariables = new URLVariables();
   _data.aa = txt1.text;
   _data.bb = txt2.text;

4.次に、ターゲットURL、要求方法(GETまたはPOST)、追加ヘッダ情報、およびMIMEタイプ(例えば、XMLコンテンツをアップロードする場合)などのHTTP要求のすべての情報を含むURLRequest対像を作成する.
var _request:URLRequest = new URLRequest();
   _request.url = url;
   _request.method = URLRequestMethod.POST;
   _request.data = _data;

5、URLRequestイメージがあれば、それを送信する必要があります.この場合、URLLoaderでURLRequestをロードできます.この場合、リクエストも送信されます.URLLoader URLのデータはダウンロードが完了するまで使用できませんので、COMPLETEイベントをリスニングしてダウンロードが完了したかどうかを判断します.
var loader:URLLoader = new URLLoader();
   loader.addEventListener(Event.COMPLETE,completeHandler);
   
   loader.load(_request);

実際には、URLLoaderを使用する必要がなく、sendToURLメソッドを使用してURLRequestを直接送信することができます.
sendToURL(_request);

sendToURLは送信するだけで、送信後は成功するかどうかにかかわらず、UDPに似ていますよ.
6、最後に、URLLoaderがダウンロードしたデータを検証する.つまり、COMPLETEをリスニングした後に実行する方法:
private function completeHandler(evt:Event):void{
   
   if(String(evt.target.data) == "success"){
    trace("submit success");
   }
   else{
    trace("submit failed");
   }
   
  }

7、これでasの論理コードはすべて完了しましたが、パッケージがインポートされていないため、実行時にエラーが発生します.
URLmariables、URLRequest、URLRequestMethod、URLLoader、sendToURLともにflash.Netパッケージの下にあるので、「import flash.net.*;」をインポートします.
Event、MouseEventはすべてflashです.eventsパッケージの下にあるので、「import flash.events.*;」をインポートします.(パッケージを別々にインポートすることもできます).
私のボタンは絵なので、素子に変換したので、私のtestクラスはMovieClipを継承する必要があるので、flash.display.MovieClipパッケージのサポート.
Flashでの送信機能が完了しました.aspでどうすればいいか見てみましょう.Netで送信されたデータを受信します.
service.ashxファイルの内容:
postで提出された場合はRequestを使います.Form[];getで提出されたらRequestを使います.QueryString[];あるいは直接Request[]で、postでもgetでも構わない.
public void ProcessRequest(HttpContext context)
        {
            string name = context.Request.Form["aa"];
            string password = context.Request.Form["bb"];
            context.Response.ContentType = "text/plain";
            if (string.IsNullOrEmpty(name) && string.IsNullOrEmpty(password))
            {
                context.Response.Write("success");
            }
        }

以上の手順でASコードを間違えた場合はtestを参照してください.asファイル内の完全なコード:
package {
 import flash.net.*;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.display.MovieClip;
 public class test extends MovieClip {
  public function test():void {
   submit.addEventListener(MouseEvent.CLICK,postForm);
  }
  private function postForm(evt:MouseEvent):void {
   var url:String = "http://localhost:22405/service.ashx";
   
   var _data:URLVariables = new URLVariables();
   _data.aa = txt1.text;
   _data.bb = txt2.text;
   
   var _request:URLRequest = new URLRequest();
   _request.url = url;
   _request.method = URLRequestMethod.POST;
   _request.data = _data;
   
   //sendToURL(_request);
   var loader:URLLoader = new URLLoader();
   loader.addEventListener(Event.COMPLETE,completeHandler);
   
   loader.load(_request);
   
   //loader.load(new URLRequest(url + "?aa=11&bb=22"));
  }
  
  private function completeHandler(evt:Event):void{
   
   if(String(evt.target.data) == "success"){
    trace("submit success");
   }
   else{
    trace("submit failed");
   }
   
  }
  
 }
}