2009-12-27 2 views
0

J'ai une classe qui charge des données xml via script PHP. J'essaie de saisir le format XML (que j'ai vérifié est formaté correctement), et le bourrer dans un certain nombre de variables. J'essaie:as3: xml charge mais ne semble pas être forcé à natif flash xml

package utils.php 
{ 
    import flash.events.Event; 
    import flash.events.EventDispatcher; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 

    public class DirectoryReader extends EventDispatcher 
    { 
     public var fileList:XMLList; 
     public var totalBytes:int; 

     private var loader:URLLoader; 

     public function DirectoryReader(url:String) 
     {   
      var urlreq:URLRequest = new URLRequest(url); 
      trace(url); 

      urlreq.contentType = "text/xml"; 
      urlreq.method = URLRequestMethod.POST; 

      loader = new URLLoader(urlreq); 
      loader.addEventListener(Event.COMPLETE, completeHandler); 
      loader.load(urlreq); 
     } 

     protected function completeHandler(e:Event):void 
     { 
       trace("seems to have worked..."); 
       var loaded:XML = loader.data; 
       fileList = loaded.child("filelist").attribute("file"); 
       trace("file list: " + fileList); 

       totalBytes = loaded.child("totalsize"); 
       trace("total size: " + totalBytes); 

       dispatchEvent(new Event("directoryLoaded")); 
     } 

    } 
} 

Ai-je fait quelque chose d'évident qui ne va pas? Fondamentalement, j'obtiens une erreur que la variable chargée ne peut pas être propagée correctement comme s'il y a une incompatibilité de type. FWIW, ma classe étend EventDispatcher afin que je puisse notifier les autres classes qu'elle a chargées. J'envoie une URL, y compris les variables php ala? et &.

Merci, JML

+0

Pouvez-vous fournir plus de code comment utiliser votre classe ... – Patrick

+0

vous oui, je l'ai mis à jour le code. – jml

+0

En tant que pointe non liée, ceci: loaded.child ("filelist"). Attribute ("file"); est la même que celle-ci: loaded.filelist. @ File ;) – Cay

Répondre

2

En fait, je pense que URLRequest.contentType se réfère uniquement aux en-têtes de demande, et non pas la réponse. Et AFAIK, même si vous obtenez un en-tête de réponse texte/xml, Flash traitera en effet comme une chaîne, vous devez donc créer un nouvel objet XML en utilisant la chaîne de réponse comme paramètre "expression" ...

Je pense que cela résoudrait votre problème:

var loaded:XML = new XML(loader.data); 
+0

BAM! Juste comme ça. Merci beaucoup ... Je ne voyais pas vraiment le fait que j'avais besoin d'initialiser la nouvelle instance XML. Très apprécié, Cay. – jml

+0

Le long de ces lignes, y a-t-il quelque chose comme whatIsTypeOf (x)? – jml

+0

oui, vérifiez le paquet flash.utils ... describeType() vous donnera un xml avec la description complète de l'objet; il y a quelques autres méthodes pour récupérer les noms de classe et tel ... Aussi, pour vérifier la compatibilité de type, l'opérateur "est" est le chemin à parcourir;) – Cay