新版本:
感谢您的回复。对不起,我重新开始:
导入(。*用于测试):
mx.events.*
mx.soap.*
mx.rpc.*
mx.controlls.*
creationCompleteHandler()在programm start中使用creationComplete调用:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="creationCompleteHandler(event)">
..
在这个函数中,我从MySQL Table modul1请求数据。 module1Service1.getAllModule1_where是从Flex Design View自动生成的。这是一个与PHP / MySQL对话的服务。这个功能很好。参数中的id 2735是硬编码的,用于测试。 MySQL表modul1看起来像:
ID_MODUL1(PK) NAME 1 Modulx 2 Moduly 3 Modulz
protected function creationCompleteHandler(event:FlexEvent):void {
getAllModule1_whereResult2.token = module1Service1.getAllModule1_where(2735);
getAllModule1_whereResult2.addEventListener(ResultEvent.RESULT,waitForResult1);
}
结果准备好后,调用waitForResult1(event:ResultEvent)。现在我需要做一个新的MySQL调用。在这个函数中,我想从表modul1迭代MySQL结果行,并从MySQL表modul1_content中获取相应的数据,其中modul1_content.id_modul(FK)= modul1.id_modul1(PK)。循环中的变量id_module1使用正确的id设置。 table modul1_content看起来像:
ID_MODUL1_CONTENT(PK) ID_MODUL1(FK) CONTENT 1 1 text... 2 1 text... 3 3 text... 4 2 text...
//get module2 from module1_id
public function waitForResult1(event:ResultEvent):void {
for(var i:int = 0; i < getAllModule1_whereResult2.lastResult.length; i++){
id_module1 = getAllModule1_whereResult2.lastResult[i].id_modul1;
c = new CallResponder();
c.token = module2Service.getAllModule2_where( id_module1 );
c.addEventListener(ResultEvent.RESULT,getListener2(i,getAllModule1_whereResult2.lastResult.length));
}
}
在每次迭代中,都会调用getListener2()。在最后一次迭代中,调用writeBook(module1,module2)。 writeBook工作正常,但参数module2缺乏。在每次迭代中,我想在公共变量module2 [i]中添加MySQL的结果。我被设定了。 0,1,2但模块2 [0]和模块2 [1]为空,模块2 [2]是正确的。存在i = 0和i = 1的MySQL行。
public function getListener2(i:Number, max:Number):Function {
return function(e:ResultEvent):void{
module2[i] = c.lastResult;
Alert.show( c.lastResult + " " + i);
//all data loaded, call writeBook
if(i == max -1){
writeBook( module1, module2 );
}
};
}