[英]AS3 concatenate rtmp connection string from xml between two functions
我不斷在Flash Media Server下獲得應用程序實例的“空”。 我似乎無法將值從一個函數傳遞給另一個函數
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;
}
您的問題是在使用xinstance字符串之前,您不等待XML加載。 在initConnection函數上,調用getXML()-開始加載xml,您需要等到xml加載后,再執行initConnection函數中的其余代碼。 這是一個建議的更改:(我添加了go()函數,該函數在處理xml之后被稱為)
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.