我正在尝试从一个URLLoader COMPLETE事件的函数中获取一个值,但即使在函数外部声明变量也不允许我获取该值。我被卡住了。
似乎Flash的异步性质使得无法获得价值:例如这有效:
// Initialise a URLLoader to get XML data from XML file
var myFPBLoader:URLLoader = new URLLoader();
myFPBLoader.load(new URLRequest("flightPlannerBoard.xml"));
// Check XML data fully loaded
myFPBLoader.addEventListener(Event.COMPLETE, processFPBxml);
var myXML:XML = new XML();// Declared **outside** function
function processFPBxml(e:Event):void {
this.myXML = XML(e.target.data);
trace("yep" + myXML); // This works
myTraceXML();
}
function myTraceXML(){
trace("more tests:" + myXML); // **This trace works**
}
trace("more tests:" + myXML); // This **doesn't** work
如何随时随地获得可以使用的价值?
答案 0 :(得分:2)
以下是您的代码中发生的事情:
processFPBxml()
,myTraceXML()
以及变量myFBPLoader
和myXML
已声明。myFPBLoader.load
。 此时代码不会停止。加载是异步调用,其余代码正在立即执行。trace("more tests:" + myXML); // This **doesn't** work
Event.COMPLETE
。processFPBxml()
。此时,myXML被分配给下载的数据。myTraceXML()
被召唤。现在,如果要在加载XML后继续执行代码,则必须将代码划分为单独的函数,这些函数可以生成特定任务,并在从XML获取数据后调用这些函数。在这种情况下,您可以将myTraceXML()
重命名为init()
或任何对您有意义的内容并编写程序的其余部分(在此特定函数中不需要。使用它作为起点)。
答案 1 :(得分:0)
如您所述,通过URLLoader
请求的数据是异步获取的。
这意味着在Flash收到之后,之后的数据无法访问。你想做的事情是不合逻辑的,无法完成。
如果可能,为什么Web应用程序在查找要显示的信息时会加载符号等?