2009-09-02 50 views
0

我試圖從C#的Response.Write(「字串例如」)爲ActionScript字符串來讀取SWF文件閱讀C#的Response.Write與ActionScript 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#像這樣

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

    } 

我怎樣寫「此字符串」從C#成,說點我的SWF文件的ActionScript「讀C#字符串這裏」內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是關鍵。太感謝了 – 2009-09-02 17:35:14

0

首先做一個簡單的跟蹤,以確保您得到來自服務器的響應:

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

你的反應應該是在返回值的data領域。如果要返回鍵值對(這是您當前的ActionScript代碼所期望的),則需要設置格式化返回文本以支持它。

例如

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

我不知道C#不夠好,知道Response將URL編碼數據,但數據應該是URL編碼。如果您發送像這樣的鍵值對,那麼您可以使用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沒有巨大的風扇,但Flash作品非常好與該格式代替。如果您在響應返回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遠程處理更簡單的任何東西。

如果您要在服務器和Flash之間來回發送大量數據,您應該查看Remoting和AMF。