2009-09-02 4 views
0

Je suis en train de lire dans une chaîne à partir d'un C# Response.Write ("exemple de chaîne") dans ActionScript pour un fichier swfLecture C# Response.Write avec Actionscript 3.0

Mon code actionscript ressemble à ceci

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

... Et mon C# ressemble à ceci

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

    } 

Comment puis-je écrire « cette chaîne » du C# dans le code ActionScript de mon fichier SWF au point qui dit « lu chaîne C# ici » au le loaderCompleteHandler?

Merci

Répondre

1

Vous êtes très proche, en fait ...

Assurez-vous de vider votre fichier .aspx (sauf l'élément de page en haut) et appelez Response.Clear() avant Response.Write sur votre texte. Sinon, vous enverrez des balises html, head et body avec votre texte.

Ensuite, il suffit de regarder le chargeur.données dans votre charge gestionnaire complet en 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

C'est exactement ce que je devais savoir. loader.data était la clé. Merci un million –

0

d'abord faire un simple trace pour vous assurer d'obtenir une réponse du serveur:

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

Votre réponse doit être dans le domaine data de la valeur retournée. Si vous souhaitez renvoyer des paires clé-valeur (ce que votre code ActionScript actuel attend), vous devez formater votre texte de retour pour le prendre en charge.

par exemple.

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

Je ne sais pas C# assez bien pour savoir si Response va url coder les données, mais les données doivent être codées URL. Si vous envoyez des paires de valeurs clés, vous pouvez utiliser URLVariables comme dans votre exemple pour l'analyser sous une forme plus facilement utilisable.

par exemple.

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

Maintenant, je ne suis pas grand fan de XML, mais Flash fonctionne assez bien avec ce format à la place. Si vous revenez dans votre réponse xml:

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

Vous pouvez faire:

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

vous pouvez utiliser E4X pour manipuler les données. Le The E4X approach to XML processing est vraiment très bien. Je l'utilise pour tout ce qui est moins complexe que le remoting Flash complet avec AMF.

Si vous allez envoyer beaucoup de données entre le serveur et Flash, vous devriez regarder dans Remoting et AMF.

Questions connexes