在Flash AS3中加载XML
我试图创建一个应用程序,它可以显示XML中的选项列表。 然后,当单击一个选项加载来自不同XML的数据以显示他们选择的选项[j]。在Flash AS3中加载XML
我在这里得到的代码只能在通过循环后进入最后一个变量,因此无论我点击哪个选项,它都会从最后一个选项进入数据。 它只删除原始按钮的最后一个孩子。
有没有人有任何想法,我怎么能得到它去正确的页面?
import flash.events.Event;
import flash.text.TextField;
var xmlLoader:URLLoader = new URLLoader();
var xmlReq:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/classxml.php");
xmlLoader.load(xmlReq);
xmlLoader.addEventListener(Event.COMPLETE, getClasses);
function getClasses(e:Event):void
{
var xmlobject:XML = new XML(e.target.data);
var classlist:XMLList = xmlobject.classgroup;
var classArray:Array = new Array();
for (var i:int = 0; i<classlist.length(); i++)
{
var classname:String = xmlobject.classgroup.classname[i];
var classtxt:TextField = new TextField();
classtxt.width = 70;
classtxt.height = 20;
classtxt.border = true;
classtxt.borderColor = 0x000000;
classtxt.background = true;
classtxt.backgroundColor = 0x888888;
classtxt.textColor = 0xFFFFFF;
classtxt.text = "" + classname;
addChild (classtxt);
classArray[i] = classtxt;
}
for (var j:int = 0; j<classlist.length(); j++)
{
classArray[j].y = 40*j;
classArray[j].x = 125;
classArray[j].addEventListener(MouseEvent.CLICK, gotoSchedule);
function gotoSchedule(event:MouseEvent):void
{
removeChild (classtxt);
var xmlLoader1:URLLoader = new URLLoader();
var xmlReq1:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/getschedule.php?id="+ j);
xmlLoader1.load(xmlReq1);
xmlLoader1.addEventListener(Event.COMPLETE, getExams);
function getExams(e:Event):void
{
trace (xmlLoader1.data);
var examtxt:TextField = new TextField();
examtxt.width = 260;
examtxt.height = 400;
examtxt.y = 30;
examtxt.x = 30;
examtxt.border = true;
examtxt.borderColor = 0x000000;
examtxt.background = true;
examtxt.backgroundColor = 0x888888;
examtxt.textColor = 0xFFFFFF;
examtxt.text = (xmlLoader1.data);
addChild (examtxt);
}
}
}
}
不知道这是否会解决您的问题(重构您的代码),但它更干净,没有其他函数内部有许多匿名函数。另外你完全不需要第二个循环。
import flash.events.Event;
import flash.events.MouseEvent;
import flash.text.TextField;
var classArray:Array = new Array();
var xmlLoader:URLLoader = new URLLoader();
var xmlReq:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/classxml.php");
xmlLoader.addEventListener(Event.COMPLETE, getClasses); //add your listeners BEFORE you call load
xmlLoader.load(xmlReq);
function getClasses(e:Event):void
{
var xmlobject:XML = new XML(e.target.data);
var classlist:XMLList = xmlobject.classgroup;
for (var i:int = 0; i<classlist.length(); i++)
{
var classname:String = xmlobject.classgroup.classname[i];
var classtxt:TextField = new TextField();
classtxt.width = 70;
classtxt.height = 20;
classtxt.border = true;
classtxt.borderColor = 0x000000;
classtxt.background = true;
classtxt.backgroundColor = 0x888888;
classtxt.textColor = 0xFFFFFF;
classtxt.text = "" + classname;
addChild (classtxt);
classArray[i] = classtxt;
classtxt.y = 40 * i;
classtxt.x = 125
classtxt.addEventListener(MouseEvent.CLICK, gotoSchedule);
}
}
function getIndexFromTextField(tf:TextField):int {
for (var i:int = 0; i < classArray.length; i++) {
if (classArray[i] == tf) {
return i;
}
}
return -1;
}
function gotoSchedule(event:MouseEvent):void
{
var tf:TextField = event.currentTarget as TextField;
removeChild(tf);
xmlLoader = new URLLoader();
var xmlReq1:URLRequest = new URLRequest("http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/getschedule.php?id=" + getIndexFromTextField(tf));
xmlLoader.addEventListener(Event.COMPLETE, getExams);
xmlLoader.load(xmlReq1);
}
function getExams(e:Event):void
{
trace(xmlLoader.data);
var examtxt:TextField = new TextField();
examtxt.width = 260;
examtxt.height = 400;
examtxt.y = 30;
examtxt.x = 30;
examtxt.border = true;
examtxt.borderColor = 0x000000;
examtxt.background = true;
examtxt.backgroundColor = 0x888888;
examtxt.textColor = 0xFFFFFF;
examtxt.text = (xmlLoader.data);
addChild(examtxt);
}
我得到的最后一个函数 –
未定义的属性xmlLoader1访问我不好,你必须退出函数作为一个全局变量。更新代码 – BadFeelingAboutThis
这对你的问题有帮助吗? – BadFeelingAboutThis
在第一眼看起来像它应该工作,你确认您的http://praxis2.cit.ie/~patrickhallihan/DynamicContent/autumn/getschedule.php?id=2返回正确的东西?此外,不需要两个独立的循环 – BadFeelingAboutThis
我已经摆脱了第二个循环,但它仍然在做同样的事情。是的多数民众赞成在正确的地址为XML它得到它,并显示它,但只有一个最后的索引,所以无论我点击它带回数据,最后一个应该 –
对不起,并不意味着给你的印象第二个循环是一个问题,只是一个通用的编码技巧,这是不必要的。 – BadFeelingAboutThis