2009-09-02 18 views
0

と読書C#のResponse.WriteActionScript 3.0の

私のActionScriptコードは、この

のように見えます
 var requestVars:URLVariables = new URLVariables(); 
     requestVars.ornTest = "test"; 
     var request:URLRequest = new URLRequest(); 
     request.url = "http://localhost/apps/game/tree/DesignFlash.aspx"; 
     request.method = URLRequestMethod.GET; 
     request.data = requestVars; 

     var loader:URLLoader = new URLLoader(); 
     loader.dataFormat = URLLoaderDataFormat.TEXT; 
     loader.addEventListener(Event.COMPLETE, loaderCompleteHandler); 
     loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler); 
     loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
     loader.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 

     try 
     { 
     loader.load(request); 
     } 
     catch (error:Error) 
     { 
     trace("Unable to load URL"); 
     } 

      private function loaderCompleteHandler(event:Event):void 
    { 
      var variables:URLVariables = new URLVariables(event.target.data); 
      if(variables.success) 
      { 
       var ornArray = deserializeString("read string from C# here"); 
        for(var i:int=0;i<ornArray.length;i+=3) 
        { 
         addOrnamentProperty(ornArray[i],ornArray[i+1],ornArray[i+2]); 
        } 
        addOrnamentsFromArrayList(); 
      } 
    }  

    private function httpStatusHandler (event:Event):void 
    { 
      //trace("httpStatusHandler:" + e); 
    } 

    private function securityErrorHandler (event:Event):void 
    { 
      trace("securityErrorHandler:" + event); 
    } 

    private function ioErrorHandler(event:Event):void 
    { 
     trace("ioErrorHandler: " + event); 
    } 

...そして私のC#が、私は内に「ここでC#の文字列を読んで」と言う時点で私のSWFファイルのActionScriptのにC#の中から「この文字列」書くにはどうすればよいこの

protected void Page_Load(object sender, EventArgs e) 
    { 

      var test = Request["ornProperties"]; 

      if (!String.IsNullOrEmpty(Request.Params["ornTest"])) 
      { 
       string paramVars = Request.Params["ornTest"]; 

       Response.Write("this string"); 
      } 

    } 

のように見えますloaderCompleteHandler?

おかげ

答えて

1

あなたが

(一番上のページ要素を除く)ご.aspxのファイルをクリアし、あなたの前にResponse.Clear()を呼び出してください...実際には、非常に近いですResponse.Writeをあなたのテキストを出しなさい。それ以外の場合は、あなたのテキストと一緒にhtml、headおよびbodyタグを送信します。

次に、ローダーを調べるだけです。ActionScriptであなたの負荷完全なハンドラ内のデータ:

のC#:

protected void Page_Load(object sender, EventArgs e) 
{ 
    var test = Request["ornProperties"]; 
    if (!String.IsNullOrEmpty(Request.Params["ornTest"])) 
    { 
     string paramVars = Request.Params["ornTest"]; 
     Response.Clear(); //just to make sure you're not sending anything else. 
     Response.Write("this string"); 
    } 
} 

のActionScript:

private function loaderCompleteHandler(event:Event):void 
    { 
       var variables:URLVariables = new URLVariables(event.target.data); 
       if(variables.success) 
       { 
         var ornArray = deserializeString(loader.data); //just look at loader.data here. 
            for(var i:int=0;i<ornArray.length;i+=3) 
            { 
              addOrnamentProperty(ornArray[i],ornArray[i+1],ornArray[i+2]); 
            } 
            addOrnamentsFromArrayList(); 
       } 
    }  
+0

これは私が知るために必要な正確に何です。 loader.dataがキーでした。感謝万円 –

0

まず、サーバーからの応答を取得していることを確認するための簡単なトレースを実行します。

private function loaderCompleteHandler(event:Event):void 
{ 
    trace("Received server response:", event.target.data); 
} 

あなたの応答が返された値のdataフィールドにする必要があります。現在のActionScriptコードで期待されるキーと値のペアを返す場合は、返されるテキストをフォーマットしてサポートする必要があります。

Response.Write("someKey=someValue&anotherKey=anotherValue"); 

私はResponseは、データをエンコードURLますが、データはURLエンコードする必要があります。知っているC#は十分知っていませんこのようにキー値のペアを送信すると、例のようにURLVariablesを使用して、より使いやすいフォームに解析できます。

private function loaderCompleteHandler(event:Event):void 
{ 
    var loader:URLLoader = URLLoader(event.target); 
    var variables:URLVariables = URLVariables(loader.data) 

    trace("Some Key:", variables.someKey); 
    trace("Another Key:", variables.anotherKey); 
} 

今私はXMLのない巨大なファンですませんが、フラッシュではなく、その形式でかなりうまく動作します。あなたはあなたの応答でXMLを返す場合:

Response.Write("<root><blah>foo</blah></root>"); 

あなたは行うことができます。

private function loaderCompleteHandler(event:Event):void 
{ 
    var loader:URLLoader = URLLoader(event.target); 
    var xml:XML = new XML(loader.data); 
} 

を、あなたがデータを操作するためにE4Xを使用することができます。 The E4X approach to XML processingは本当に素晴らしいです。 AMFを使用したフル・フラッシュ・リモーティングよりも複雑ではありません。

サーバーとFlashの間で多くのデータをやりとりする場合は、RemotingとAMFを調べる必要があります。