我是动作脚本和flash的新手,但我设法制作代码,每隔30秒从php文件获取数据并刷新结果:
var timerRefreshRate:Number = 30000;
var fatherTime:Timer = new Timer(timerRefreshRate, 0);
fatherTime.addEventListener(TimerEvent.TIMER, testaa);
fatherTime.start();
function testaa(event:Event):void{
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,varsLoaded);
loader.load(new URLRequest("data.php"));
function varsLoaded (event:Event):void {
this.opaqueBackground = loader.data.color;
title.text=loader.data.title;
banner_text.text=loader.data.text;
}
}
但现在我面临两个问题:
1。)用户必须等待30秒才能让电影第一次加载
2。)设置背景颜色不再有效。
我做错了什么?
答案 0 :(得分:4)
您可以立即调用您的功能,无需等待30秒即可立即加载。只需将函数的参数更改为默认为null事件:
function testaa(event:Event = null):void{
//...
}
现在您可以像这样调用函数:
//...
fatherTime.start();
testaa();
所以你启动计时器但立即运行一次。
对于您的第二个问题,问题很可能是您使用的是嵌套函数,因此this
不会引用您的类,而是引用testaa函数。嵌套函数通常是不好的做法,如果可能的话你应该避免使用它们。将函数和加载器引用移到外面它应该可以工作。最终结果应该是这样的:
var loader:URLLoader;
var timerRefreshRate:Number = 30000;
var fatherTime:Timer = new Timer(timerRefreshRate, 0);
fatherTime.addEventListener(TimerEvent.TIMER, testaa);
fatherTime.start();
testaa();
function testaa(event:Event = null):void{
loader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,varsLoaded);
loader.load(new URLRequest("data.php"));
}
function varsLoaded (event:Event):void {
this.opaqueBackground = loader.data.color;
title.text=loader.data.title;
banner_text.text=loader.data.text;
}