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");
}
}
}
}