0

我不断为闪存媒体服务器下的应用程序实例获取“空”。我似乎无法将值从一个函数传递到另一个函数

XML 示例

<bsettings>
<obj title="instance">19046</owner>
<obj title="id">uniqueid</owner>
<obj title="name">somename</owner>
<obj title="date">08/01/2012</owner>
<obj title="gender">female</owner>
</bsettings>

AS3 代码

<mx:Application 
    xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
    applicationComplete="initConnection(event)">

private var xinstance:String;
private var xmlstring:String = "http://www.blah.com/blahblah.xml";

protected function getXML():void{
XML.ignoreWhitespace = true;
var myXML:XML;
var myLoader:URLLoader=new URLLoader();
myLoader.load(new URLRequest(xmlstring));
myLoader.addEventListener(Event.COMPLETE, processXML);

function processXML(e:Event):void {
myXML = new XML(e.target.data);
for (var i:int = 0; i<myXML.*.length(); i++){
xinstance = myXML.obj[0];
xblah = myXML.obj[1];
xblah1 = myXML.obj[2];
xblah2 = myXML.obj[3];
xblah3 = myXML.obj[4];
}
}
}

private function initConnection(event:FlexEvent):void{
getXML();

//problem here, the xinstance isn't saved in the fmsstring
var fmsstring:String = "rtmp://blah.com/appname/" + xinstance;

nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
nc.connect(fmsstring);
nc.client = this;
}
4

1 回答 1

1

您的问题是您在使用 xinstance 字符串之前没有等待 XML 加载。在 initConnection 函数上调用 getXML() - 它开始加载 xml,在执行 initConnection 函数中的其余代码之前,您需要等到 xml 加载完毕。这是一个建议的更改:(我添加了在处理 xml 之后调用的 go() 函数)

private var xinstance:String;

protected function getXML():void {
    var xmlstring:String = "http://www.blah.com/blahblah.xml";
    XML.ignoreWhitespace = true;
    var myLoader:URLLoader=new URLLoader();
    myLoader.load(new URLRequest(xmlstring));
    myLoader.addEventListener(Event.COMPLETE, processXML);
}

protected function processXML(e:Event):void {
    var myXML:XML = XML(e.target.data)

    //THIS IS NOT A GOOD WAY TO DO THIS, use e4x
    //for (var i:int = 0; i<myXML.*.length(); i++){
    //xinstance = myXML.obj[0];
    //xblah = myXML.obj[1];
    //xblah1 = myXML.obj[2];
    //xblah2 = myXML.obj[3];
    //xblah3 = myXML.obj[4];
    //}

    //MUCH cleaner/easier/more efficient
    xinstance = myXML.bsettings.obj.(@title == "instance");

    go();
}

private function initConnection(event:FlexEvent):void{
    getXML();
}

private function go():void {
    var fmsstring:String = "rtmp://blah.com/appname/" + xinstance;

    nc = new NetConnection();
    nc.addEventListener(NetStatusEvent.NET_STATUS, onNetStatus);
    nc.connect(fmsstring);
    nc.client = this;
}
于 2012-08-08T01:05:44.920 回答