Flex httpservice返回值类型和处理 (转)
这两天在考虑flex与后端java服务交互的问题。在采用BlazeDS的Remote Object方式,还是传统的http service方式之间徘徊了一段时间 采用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 不生成用户界面友好的错误消息。