2009-05-30 88 views

回答

3

由於flex是基於事件的,所以這應該非常簡單。只需創建2個URLRequest對象(我假設這兩個API都是基於REST的),並設置您的GET變量。爲每個URLRequest對象創建一個loadComplete事件偵聽器,並在每個事件偵聽器中編寫處理來自兩個API的結果的代碼。

這應該做到這一點。

+0

謝謝futureelite7回覆我。答案是非常好的 但如果我只在時間設置eventlistener任何一個事件。所以我怎麼做兩個API請求對象。 你能告訴我任何參考url – 2009-05-30 11:25:48

0

不是「在同一時間」,沒有。首先,你只有一個(後臺)線程可以使用,並且該線程一次只能做一件事,所以無論你編寫代碼,其中一個請求總是會首先啓動。

如果您要問的是您是否可以在一次調用中向兩個服務發送請求,則答案再次爲否(因爲兩者都有不同的URL,並且ActionScript API不會將數組作爲網址參數,它們只接受字符串)。這就是說,我想你可以「假裝它」,就是說,讓你的Flex應用程序調用你自己寫的服務 - 例如在C#中 - 並且讓該服務調用(同步)Google,然後雅虎,然後將控制權返回給您的Flex應用程序以及修改後的結果集,這些結果集分別由Google和Yahoo分別返回。

除非我誤解(或過度)了這個問題。 ;)

這裏的說明來處理調用兩個服務的一種方式一些示例代碼 - 不兼任,但一和右後外,使用mx.rpc.HTTPService

<?xml version="1.0" encoding="utf-8"?> 
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="onCreationComplete()"> 

    <mx:Script> 
     <![CDATA[ 

      import mx.rpc.http.HTTPService; 
      import mx.rpc.events.ResultEvent; 
      import mx.rpc.events.FaultEvent; 

      private function onCreationComplete():void 
      { 
       callGoogle(); 
       callYahoo(); 
      } 

      private function callGoogle():void 
      { 
       var svc:HTTPService = new HTTPService(); 
       svc.url = "http://api.google.com/someservice.xml"; 
       svc.addEventListener(ResultEvent.RESULT, onGoogleResult, false, 0, true); 
       svc.addEventListener(FaultEvent.FAULT, onGoogleFault, false, 0, true); 
       svc.send(); 
      } 

      private function callYahoo():void 
      { 
       var svc:HTTPService = new HTTPService(); 
       svc.url = "http://api.yahoo.com/someservice.xml"; 
       svc.addEventListener(ResultEvent.RESULT, onYahooResult, false, 0, true); 
       svc.addEventListener(FaultEvent.FAULT, onYahooFault, false, 0, true); 
       svc.send(); 
      } 

      private function onGoogleResult(event:ResultEvent):void 
      { 
       trace(event.result); 
      } 

      private function onGoogleFault(event:FaultEvent):void 
      { 
       trace(event.fault.message); 
      } 

      private function onYahooResult(event:ResultEvent):void 
      { 
       trace(event.result); 
      } 

      private function onYahooFault(event:FaultEvent):void 
      { 
       trace(event.fault.message); 
      } 

     ]]> 
    </mx:Script> 

</mx:Application> 

希望幫助!回覆評論,我會留意。

相關問題