0

我是 AS 新手,我正在尝试解决一些问题。

我有下一个脚本

var t:Date = new Date ();
var day=t.getDate();
var month=t.getMonth()+1;
var today=day+"."+month;
var u:Number = 0;

var b_persons:Array = new Array ();

var loader:URLLoader = new URLLoader(new URLRequest("bday.xml"));
var bday_file:XML = new XML();

loader.addEventListener(Event.COMPLETE, endLoad);


function endLoad(all_data:Event)

{
   bday_file = XML(all_data.target.data);

   for each (var person:XML in bday_file.Person) 
   {
      if (person.BD == today) 
      {
          b_persons.push(person.FIO);

          trace (b_persons.length);
      }
   }
}

function assign_txtBdayPerson()
{
    txtBdayPerson.text=b_persons[u];
    trace(b_persons[u]);
    u=u+1;
    if (u >= b_persons.length)
    {clearInterval(delay_assign_txtBdayPerson);}

}

trace ("Test"+b_persons.length);

if (b_persons.length != 0)
    {
        var delay_assign_txtBdayPerson = setInterval(assign_txtBdayPerson,3000);
    }

我的 xml 文件有 2 个合适的条件,输出窗口显示下一个序列

测试 0 比 1 和最后 2

所以看起来

trace ("Test"+b_persons.length); 

早于

function endLoad(all_data:Event) 

完成了

请你帮助我好吗?

4

2 回答 2

1

如果您希望/需要trace ("Test"+b_persons.length);在 XML 加载并被解析后运行,您需要将其放置在 endload 或 endload 将在其函数结束时调用的函数中。

如果您不习惯事件,它们可能看起来不同且邪恶,但是一旦您习惯了它们,您会发现它们更容易处理。

于 2012-07-25T14:02:18.343 回答
0

它发生了,因为这trace ("Test"+b_persons.length);是在与实际加载开始相同的“帧”中执行的。endLoad()当 XML 已加载时,回调至少在下一帧中执行。这就是 Flash 中异步流的本质。

于 2012-07-25T12:28:39.547 回答