2012-04-02 49 views
1

我试图加载XML文件的书籍列表,我环顾四周,发现这个功能,试图调整它为我工作,但我不能得到这个工作,我米能够从它加载XML和实际读取的信息,但我试图建立一个全球性的阵列或类似的东西,所以我可以在以后访问数据,加载XML在ActionScript 3

继承人的代码:

var books:XML = loadBooks(); 
trace(books); //Returns a blank output 

function loadBooks():XML { 
    var xmlLoader:URLLoader = new URLLoader(); 
    var xmlData:XML = new XML(); 
    xmlLoader.addEventListener(Event.COMPLETE, LoadXML); 
    xmlLoader.load(new URLRequest("bookList.xml")); 

    function LoadXML(e:Event):void { 
    xmlData = new XML(e.target.data); 
    trace(xmlData); //Returns what I want to have 
    } 

    return xmlData; 
} 

我加入的跟踪部分评论()来解释一下发生的事情 在此先感谢。

+1

的问题是你的XML负载异步:你的loadXML()函数被调用独立的loadBooks(),所以你可以调用loadBooks()在时间A,但极有可能的loadXML(更多)将会被调用不同的时间B.你应该改变你的代码来迎合这一点。 – 2012-04-02 12:43:25

回答

1

第一个跟踪不会显示你想要什么,因为XML是异步加载。这就是为什么您将LoadXML添加为“完成”事件的事件侦听器的原因。因此,无论您想要使用加载的XML,您都应该在LoadXML函数中执行此操作。

+0

非常感谢,它现在可以工作,我现在明白问题是什么 – Radicate 2012-04-02 13:25:18

0

在你试图追查书的初始阶段,装载机还没有在XML文件加载完成后 - 所以它不会跟踪任何东西。然而,第二个是因为它与Complete事件绑定在一起,并且只会在加载器完成加载XML时触发。 所以如上,你要与你的XML文件做任何事情应放在loadXML的函数内。