2011-08-18 43 views
0

我使用wsdl和soap調用web服務。我寫了一個flex代碼,它在文本區域中返回[object AsyncToken]作爲輸出。這意味着什麼劑量? 代碼:從webservice調用方法的問題

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

     <mx:WebService id="DirectoryService" useProxy="false" wsdl="http://cmuicds.rutgers.edu/uicds/core/ws/services/DirectoryService.wsdl"> 
     <mx:operation name="GetIncidentList" makeObjectsBindable="true" 
      resultFormat="e4x" 
      result="onResult(event);" 
      fault="onFault(event);"/>  
     </mx:WebService> 

     <mx:ApplicationControlBar dock="true"> 
     <mx:Button id="button" 
      label="Get incidents from web service" 
      click="button_click()"/> 
     <mx:ComboBox id="cmb" dataProvider="{zipfls}" labelField="name" width="241" height="24"/> 
     <mx:TextArea id="textArea" x="10" y="40" width="616" height="61"/> 
     </mx:ApplicationControlBar> 

    <mx:Script> 
     <![CDATA[ 
      import mx.controls.Alert; 
      import flash.utils.ByteArray; 
      import mx.rpc.events.ResultEvent; 
      import mx.rpc.events.FaultEvent; 
      import mx.utils.ObjectUtil; 
      import mx.collections.ArrayCollection; 
      import mx.rpc.soap.mxml.WebService; 

      [Bindable] private var zipfls:ArrayCollection; 
      private var flag:Boolean; 
      //private var byte:ByteArray; 

      private function button_click():void 
      { 
      DirectoryService.GetIncidentList(); 
      //DirectoryService.GetIncidentListRequest(); 
      flag = DirectoryService.canLoadWSDL(); 
      //flag = DirectoryService.hasOwnProperty(); 
      Alert.show("Testing....." + flag); 
      //Alert.show("Description GetIncidentList " +DirectoryService.GetIncidentList); 
      //Alert.show("Testing Arraaay....." +); 
      var objt:Object = DirectoryService.GetIncidentList(); 
      textArea.text = objt.toString() 
     } 

     private function onResult(evt:ResultEvent):void 
     { 
      //Alert.show("Hi"); 
      zipfls = evt.result as ArrayCollection; 
      //byte = new ByteArray();    
      //textArea.text = ObjectUtil.toString(evt.result); 
      // byte = evt.result as ByteArray; 
      Alert.show("Is data comming in? " + zipfls); 
     } 

     private function onFault(evt:FaultEvent):void 
     { 
      Alert.show(evt.type); 

     } 

     ]]> 
    </mx:Script> 

</mx:Application> 

回答

0

AsyncToken是服務調用的參考。當呼叫返回時,AsyncToken將分派一些事件幷包含服務呼叫的結果。但是,您不需要使用AsyncToken它由Flex框架代碼在幕後處理。你想要看的是onResult函數,它被設置爲GetIncidentList操作的處理程序。

試試這個代碼:

import mx.controls.Alert; 
import flash.utils.ByteArray; 
import mx.rpc.events.ResultEvent; 
import mx.rpc.events.FaultEvent; 
import mx.utils.ObjectUtil; 
import mx.collections.ArrayCollection; 
import mx.rpc.soap.mxml.WebService; 

[Bindable] private var zipfls:ArrayCollection; 
private var flag:Boolean; 

private function button_click():void 
{ 
    flag = DirectoryService.canLoadWSDL(); 
    DirectoryService.GetIncidentList(); 
    Alert.show("Testing....." + flag); 
} 

private function onResult(evt:ResultEvent):void 
{ 
    Alert.show("Is data comming in? " + evt.result); 
    textArea.text = ObjectUtil.toString(evt.result); 
} 

private function onFault(evt:FaultEvent):void 
{ 
    Alert.show(evt.type); 

} 
+0

我試圖運行上面的code..it看起來是不是進入onResult功能。 – kanak

+0

它是否進入'onFault'? –

+0

是的,它在5-10分鐘後給出故障結果 – kanak