Flex httpservice返回值類型和處理
2024-09-12 17:51:04
供稿:網友
采用BlazeDS的Remote Object好處是顯而易見的,只需要維護后端server部分的java對象結構即可,flex前段采用<mx:RemoteObject>的destination索引即可(簡單的配置即可)。但是壞處就是對于其他接入方式支持不了,同時對于前臺顯示方式也有所限制了。
采用http service的方式,可能會浪費一部分xml解析的時間,損失一部分效率(當前flex前端也不得不額外多出很多object的構造)。但是通用性將得到保證。
最終還是決定采用最原始的http service方式。作為平臺內的一個組件,http service的方式應該會給我帶來很多靈活的擴展性處理。
===================================================
http service使用很簡單,但是我在第一次使用的時候犯了嚴重的錯誤,浪費了不少時間。此處銘記一下,以備后續反思。
做了一個嘗試,后端利用最原始的servlet提供xml數據源,前端利用resultevent來獲取。但總是不成功。剛開是利用“res.result.toString()”這樣的方式,總只能返回[Object Object]這樣的結果。我以為是后端servlet輸出xml不正確,檢查和測試幾次,后端沒有問題。后來改成“res.result.Item.itemname”這種方式,竟然能夠得到值,但是我視圖構造成XML對象的時候,總是返回Object,無法成功。―― 埋頭苦調試了半天,終不得答案,郁悶呀。
后來值得重新回頭翻一翻as3 language reference,才恍然明白,竟然還有一個“resultFormat”屬性需要設置,默認只是返回object對象的,而我需要的是XML或E4X對象。
此處銘記如下:返回數據的格式resultFormat有幾種類型,object、array、xml、flashvars、text和e4x,默認的設置為object。
RESULT_FORMAT_ARRAY : String = "array"
[] 結果格式“array”與“object”相似,但是其返回的值始終為數組;這樣,如果從結果格式“object”返回的結果尚不是數組,則將把該項目添加為一個新數組的第一個項目。
RESULT_FORMAT_E4X : String = "e4x"
[] 結果格式“e4x”指定返回的值是一個 XML 實例,此實例可以使用 ECMAScript for XML (E4X) 表達式訪問。
RESULT_FORMAT_FLASHVARS : String = "flashvars"
[] 結果格式“flashvars”指定返回的值是包含由 & 符號分隔的名稱=值對的文本,該文本被分析為 ActionScript 對象。
RESULT_FORMAT_OBJECT : String = "object"
[] 結果格式“object”指定返回的值是 XML,但按照 ActionScript 對象樹分析。
RESULT_FORMAT_TEXT : String = "text"
[] 結果格式“text”指定 結果文本應為未經處理的字符串。
RESULT_FORMAT_XML : String = "xml"
[] 結果格式“xml”指定結果應作為指向父 flash.xml.XMLDocument 的第一個子項的 flash.xml.XMLNode 實例返回。
================================================
在 MXML 文件中使用 <mx:HTTPService> 標簽代表 HTTPService 對象。當調用 HTTPService 對象的 send() 方法時,將發出對指定 URL 的 HTTP 請求,并且返回 HTTP 響應。可以選擇向指定 URL 傳遞參數。如果沒有使用基于服務器的代理服務,則只能使用 HTTP GET 或 POST 方法。如果將 useProxy 屬性設置為 true 并使用基于服務器的代理服務,則還可以使用 HTTP HEAD、OPTIONS、TRACE 和 DELETE 方法。
================================================
銘記于胸: 遇事先查API DOC是個好習慣!
注意:由于軟件限制,當使用 GET 時 HTTPService 不生成用戶界面友好的錯誤消息。