如何在同一个Web服务中处理对多个函数的调用?

时间:2011-01-22 01:44:24

标签: flex web-services coldfusion

这是关于Flex的超级新手问题。虽然我是一名经验丰富的程序员,但这是我的第一个Flex应用程序;请耐心等待我的Flex代码。

我有一个用ColdFusion编写的Web服务。在这个Web服务中,有两个功能;一个是在测验中返回所有问题,另一个是将所有答案选择返回到测验中的问题。

            [Bindable]
        private var questionArray:ArrayCollection;
        private var cfquiz:RemoteObject;

        private function loadQuestions():void {
            currentQuestionCounter = 0;
            btnPrev.enabled = false;
            btnNext.enabled = false;
            cfquiz = new RemoteObject("ColdFusion");
            cfquiz.source = "CFCertExam.cfquiz";
            cfquiz.addEventListener(ResultEvent.RESULT, resultHandler);
        }

        private function resultHandler(event:ResultEvent):void {
            questionArray = event.result as ArrayCollection;

            txt1Questions.htmlText = questionArray.getItemAt(currentQuestionCounter).Question_Text;
            btnNext.enabled = true;
        }

我有上面的代码。在creationComplete上调用loadQuestions来检索问题。事情很好。我想要做的是在同一个Web服务中调用另一个函数returnAnswers,以返回问题的答案选项。由于我已经将cfquiz与Web服务相关联,因此我使用cfquiz来调用returnAnswers。但是,有一个与cfquiz关联的事件监听器,当returnAnswers返回结果时,将调用resultHandler。

我的问题是,首先,是否可以检查哪个函数在resultHandler中返回结果?如果是这样,怎么样?第二,在同一个Web服务中处理多个函数调用的最佳方法是什么?

提前致谢, 蒙

3 个答案:

答案 0 :(得分:2)

是的,你可以。您需要为每个方法指定一个处理函数,然后调用另一个Web服务。

答案 1 :(得分:1)

更好的方法是使用AsyncToken和AsyncResponder而不是addEventListener,如下面的代码。

tokenA = cfquiz.methodA();
tokenA.addResponder(new AsyncResponder(onResultForMethodA, onFaultMethodA));

tokenB = cfquiz.methodA();
tokenB.addResponder(new AsyncResponder(onResultForMethodB, onFaultMethodB));

tokenC = cfquiz.methodA();
tokenC.addResponder(new AsyncResponder(onResultForMethodC, onFaultMethodC));

tokenA = cfquiz.methodA();
var responderA:IResponder = new AsyncResponder(onResult, onFault, "methodA");
tokenB = cfquiz.methodB();
var responderB:IResponder = new AsyncResponder(onResult, onFault, "methodB");

tokenA.addResponder(responderA);
tokenB.addResponder(responderB);


private function onResult(evt:ResultEvent, token:Object):void {
   if(token == "methodA" ) {
     //logic for methodA
   }
   if(token == "methodB" ) {
     //logic for methodB
   }
}

答案 2 :(得分:0)

我有点困惑,因为我看不到你在哪里调用实际的web服务功能,例如from these examples,我期待看到:

cfquiz = new RemoteObject("ColdFusion");
cfquiz.source = "CFCertExam.cfquiz";
cfquiz.addEventListener(ResultEvent.RESULT, resultHandler);
cfquiz.myCFCFunctionCall(); /* where is this? */

无论如何,AFAIK你可以创建一个新的远程对象实例,并将其设置为拥有自己的事件监听器。

希望有所帮助。