0

我是 actionscript 和 flash 的新手,但我设法编写了从 php 文件中获取数据并每 30 秒刷新一次结果的代码:

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.) 设置背景颜色不再起作用。

我究竟做错了什么?

4

1 回答 1

4

您可以调用一次函数以立即加载,而无需等待 30 秒。只需将函数的参数更改为默认为空事件即可:

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;    
}
于 2013-01-16T16:48:47.653 回答