浏览 2416 次
锁定老帖子 主题:Flex HttpService重用
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2011-07-11
实现类: package com.shine.framework.httpService { import mx.rpc.events.ResultEvent; import mx.rpc.http.HTTPService; public class BasePostHttpService { private var xmlService:HTTPService; private var method:Function; public function BasePostHttpService() { } public function getResult(xmlUrl:String, method:Function, postValue:Object=null):void { this.method=method; xmlService=new HTTPService(); xmlService.method="post"; xmlService.useProxy=false; xmlService.resultFormat=HTTPService.RESULT_FORMAT_XML; xmlService.addEventListener("result", httpResult); xmlService.url=xmlUrl; xmlService.send(postValue); } private function httpResult(event:ResultEvent):void { resultXml(XML(event.result)); } protected function resultXml(value:XML):void { method.call(this, value); } } 以上代码还有一个弊端,就是连续请求两次,由于HttpService异步传输的特性,会发生两种异常情况,如: 条件:A请求函数在B请求函数前一句执行。 结果: 1.A回调数据还没返回,B回调函数已覆盖A回调函数处理稍后返回的A回调数据; 2.若A回调返回数据量过大,也就是响应时间过长,B回调数据会先于A回调数据返回,造成A回调函数处理B回调数据的情况。 这种问题的解决方案也不是很难,用Object的key/value把回调函数装入,在回调中在用key取出value操作数据,难点是如何区分回调数据,event.result应该也有id标识,用这个应该可以。 若第二次请求依赖于第一次请求,那就只能等第一次请求完成,再执行第二次请求了。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |