2009-12-27 44 views
0

我有一个类,通过php脚本加载一些xml数据。 我想抓住格式化的XML(我已验证是格式正确),并将其填入许多变量。 我尝试:as3:xml加载但似乎没有被强制为本机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")); 
     } 

    } 
} 

我是否做了任何明显的错误? 基本上我得到一个错误,即加载的变量不能正确传播,就好像存在类型不匹配一样。 FWIW,我的类扩展了EventDispatcher,以便我可以通知其他类已经加载。我发送一个URL,包括PHP变量ala?和&。

感谢, JML

+0

你能提供你如何使用你的类更多的代码... – Patrick 2009-12-27 21:25:45

+0

是的,我更新的代码。 – jml 2009-12-27 21:58:49

+0

作为一个无关的提示,这个: loaded.child(“filelist”)。attribute(“file”); 与此相同: loaded.filelist。@ file ;) – Cay 2009-12-28 01:12:03

回答

2

其实我觉得URLRequest.contentType仅指请求头,不响应。而AFAIK,即使你得到一个text/xml响应头,Flash确实会把它当作一个字符串,所以你需要使用响应字符串作为它的“表达式”参数来创建一个新的XML对象...

我认为这将解决您的问题:

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

BAM!就这样。 非常感谢......我并没有真正看到我需要初始化新的XML实例的事实。 非常感谢,礁。 – jml 2009-12-28 02:58:20

+0

沿着这些线,有什么像whatIsTypeOf(x)? – jml 2009-12-28 17:28:05

+0

是的,检查flash.utils包... describeType()会给你一个xml与对象的整个描述;还有其他一些方法来检索类名称等...另外,为了检查类型兼容性,运算符“是”是要走的路;) – Cay 2010-01-02 21:37:17