每隔XX秒刷新一次

时间:2013-01-16 16:40:29

标签: actionscript-3 flash actionscript

我是动作脚本和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。)设置背景颜色不再有效。

我做错了什么?

1 个答案:

答案 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;    
}