`

ActionScript中Http请求

阅读更多

ActionScript中Http请求

因我是用MVC模式来开发的,View和Control两层的相关代码就不列出来了,我们先来看看Model层代码
SecurityInfoModel.as

package app.securityInfo.model
{
	import com.xlands.common.net.http.events.PureHttpEvent;
	import com.xlands.common.net.http.service.PureHttpService;	
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.net.URLRequest;

	public class SecurityInfoModel extends EventDispatcher
	{
		public static const EVENT_GET_SECURITY_INFO_SUCC:String = "EVENT_GET_SECURITY_INFO_SUCC";		
		private var _securityInfo:XML;
		
		
		public function SecurityInfoModel()
		{
		}
		
		

		/**
		 * 根据id取用户信息
		 */ 
		 public function getSecurityInfo($id:int):void{
			var request:URLRequest = PureHttpService.getSecurityInfoById($id)
			var action:XlandsPureHttpAction = new XlandsPureHttpAction(request);
			action.addEventListener(PureHttpEvent.EVENT_REQUEST_COMPLETE, __onGetSecurityInfoSucc);
			action.send();
		}
		
		
		private function __onGetSecurityInfoSucc(event:PureHttpEvent):void{
			(event.currentTarget as EventDispatcher).removeEventListener(PureHttpEvent.EVENT_REQUEST_COMPLETE, __onGetSecurityInfoSucc);
			_securityInfo = event.getResponseXML();
			this.dispatchEvent(new Event(EVENT_GET_SECURITY_INFO_SUCC));
		}
		
		
	}
}

 

 

上上model层中用到了自定义的事件PureHttpEvent,主要用来下发事件时包装要传输的信息
PureHttpEvent.as

 

package com.xlands.common.net.http.events {
	import flash.events.Event;

	/**
	 *
	 *
	 */
	public class PureHttpEvent extends Event {
		public static const EVENT_REQUEST_COMPLETE:String = "event_complete";
		public static const EVENT_IO_ERROR:String = "event_io_error";
		public static const EVENT_FINISH:String = "event_finish";

		private var _responseXML:XML;

		public function PureHttpEvent($type:String, $response:XML) {
			super($type, false, false);
			_responseXML = $response;
		}

		public function getResponseXML():XML {
			return _responseXML
		}
	}
}

 

 

服务层提供接口
PureHttpService.as

package com.xlands.common.net.http.service {
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;

	/**
	 *
	 * 
	 */
	public class PureHttpService {
		public function PureHttpService() {
		}

		
		/**
		 * 根据id来取得用户信息
		 * @param $id
		 */
		public static function getSecurityInfoById($id:int):URLRequest {
			var sendObj:Object = new Object();
			sendObj.$id = $id;
			return getSSORequest("/ssoc/accountsecurity/getSecurityInfo", $id);
		}
		
		
		private static function getSSORequest($url:String, $sendObj:Object=null):URLRequest{
			return getRequest("http://www.yourwebsite/" + $url, $sendObj);			
		}		
		
		private static function getRequest($url:String, $sendObj:Object=null, $post:Boolean=true):URLRequest{
			var request:URLRequest = new URLRequest();
			request.url = $url;
			if ($sendObj){
				var variables:URLVariables = new URLVariables();
				for (var key:String in $sendObj){
					variables[key] = $sendObj[key];
				}
				request.data = variables; 
			}
			if ($post){
				request.method = URLRequestMethod.POST;
			}
			return request;			
		}
	}
}

 

 

再来看看真正的请求是如何处理的
XlandsPureHttpAction.as

package com.xlands.common.net.http {
	import com.xlands.common.net.http.events.PureHttpEvent;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.IOErrorEvent;
	import flash.events.ProgressEvent;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.URLRequestMethod;
	import flash.net.URLVariables;


	/**
	 *
	 * 
	 */
	public class XlandsPureHttpAction extends EventDispatcher {
		private var _request:URLRequest;

		public function XlandsPureHttpAction($request:URLRequest) {
			_request = $request;
		}

		public function send():void {
			var urlLoader:URLLoader = new URLLoader();
			urlLoader.addEventListener(Event.COMPLETE, onComplete);
			urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
			urlLoader.addEventListener(ProgressEvent.PROGRESS, onProgress);
			urlLoader.load(_request);
		}

		private function onComplete(e:Event):void {
			e.currentTarget.removeEventListener(Event.COMPLETE, onComplete);
			e.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
			e.currentTarget.removeEventListener(ProgressEvent.PROGRESS, onProgress);
			//analyzeResult(new XML((e.currentTarget as URLLoader).data))
			if (this.hasEventListener(PureHttpEvent.EVENT_REQUEST_COMPLETE) == true) {
				this.dispatchEvent(new PureHttpEvent(PureHttpEvent.EVENT_REQUEST_COMPLETE, new XML((e.currentTarget as URLLoader).data)));
			}
			doFinish();
		}

		private function analyzeResult($xml:XML):void {
			var value:*;
			if (($xml..success as XMLList).length()) {
				value = $xml..success.toString();
			} else if (($xml..account as XMLList).length()) {
				/*这里很不好,很不统一,根据token获取用户信息
				   成功:
				   <?xml version="1.0" encoding="UTF-8"?>
				   <sso>
				   <account id="100000" comeFrom="XLANDS" sex="false" nickname="samyang" name="samyang" email="aaaa@163.com" enable="false"/>
				   </sso>
				 */
				value = $xml..account[0];
			} else if (($xml..error as XMLList).length()) {
				value = $xml..error.toString();
			} else {
				//服务器返回异常数据
				throw new Error("the value which the server returns is invalidated!!");
				return;
			}
		}

		private function onIOError(e:IOErrorEvent):void {
			e.currentTarget.removeEventListener(Event.COMPLETE, onComplete);
			e.currentTarget.removeEventListener(IOErrorEvent.IO_ERROR, onIOError);
			e.currentTarget.removeEventListener(ProgressEvent.PROGRESS, onProgress);
			if (this.hasEventListener(PureHttpEvent.EVENT_IO_ERROR) == true) {
				this.dispatchEvent(new PureHttpEvent(PureHttpEvent.EVENT_IO_ERROR, null));
			} else {
				trace("您的请求不存在,或者服务器繁忙,请稍候再试。");
			}
			doFinish()
		}

		private function onProgress(e:ProgressEvent):void {
		}

		private function doFinish():void {
			if (this.hasEventListener(PureHttpEvent.EVENT_FINISH) == true) {
				this.dispatchEvent(new PureHttpEvent(PureHttpEvent.EVENT_FINISH, null));
			}
		}
	}
}

 

分享到:
评论

相关推荐

    ActionScript 3.0 CookBook 中文翻译

    8. 网络通信:利用XMLSocket、URLLoader等类进行HTTP请求、XML数据交换,实现网络应用。 9. 数据存储:使用SharedObject进行本地数据持久化,或与服务器进行数据交换。 10. Flex框架:了解如何结合Flex SDK创建用户...

    ActionScript

    - **发送请求**:向服务器发送HTTP请求获取数据。 - **接收响应**:解析服务器返回的数据并作出相应处理。 #### 十六、XML运用 XML(可扩展标记语言)是一种常用的数据交换格式,ActionScript提供了支持XML处理的...

    actionscript3官方中文帮助文档CHM

    7. **网络编程**:AS3提供了`URLLoader`和`URLRequest`类来实现HTTP请求,`Socket`类用于TCP通信,以及`SharedObject`类用于本地数据存储。 8. **声音和视频处理**:`flash.media`包中的`Sound`和`Video`类提供了...

    ActionScript开发技术大全

    9. **网络编程**:使用ActionScript进行网络通信,包括Socket、URLLoader、XMLSocket等类的使用,实现HTTP请求和响应,以及WebSocket实时通信。 10. **音频和视频处理**:ActionScript提供了对音频和视频的访问和...

    ActionScript 课堂讲义

    8. **网络编程**:ActionScript支持Socket和URLLoader类,可以进行HTTP请求和WebSocket通信,实现客户端与服务器的数据交换。 9. **错误处理和调试**:了解如何使用try-catch语句进行错误处理,以及使用...

    actionscript

    5. **网络编程**:介绍如何进行HTTP请求、XML和JSON数据的处理。 6. **错误处理**:如何使用try-catch处理运行时错误。 7. **高级主题**:可能包括声音和视频处理、本地存储、性能优化等。 通过深入学习和实践这个...

    ActionScript+3.0+Cookbook+中文完整版

    7. **网络通信**:AS3提供了URLLoader和URLRequest类进行HTTP请求,Socket类处理TCP连接,XMLSocket类处理XML数据的发送和接收。这些工具允许与服务器进行异步通信,实现数据交换。 8. **声音与视频处理**:Sound和...

    ActionScript 2.0字典CHM版.rar

    6. **网络通信**:通过XMLSocket、URLLoader和LoadVars等类,ActionScript 2.0支持与服务器进行数据交换,如发送HTTP请求、接收XML数据。 7. **组件使用**:Flash Player提供了许多预构建的UI组件,如Button、...

    ActionScript3.0 中文版

    9. URLLoader和URLRequest:这两个类用于发送HTTP请求和接收响应,是网络通信的基础。 10. NetConnection和NetStream:用于建立实时的双向通信,如音频和视频流。 11. Stage和StageVideo:在AS3.0中,Stage类代表...

    ActionScript 3.0 Cookbook 中文完整版

    书中讲解了如何使用这些技术进行HTTP请求、发送POST数据,以及如何解析和生成XML和JSON格式的数据。 七、错误处理和调试 书中强调了错误处理的重要性,介绍了try...catch语句和Error类的使用,帮助开发者捕获和处理...

    Flash ActionScript3.0编程手册

    - **网络编程**:学习如何使用ActionScript3.0进行网络通信,如发送HTTP请求、读取XML数据等。 #### 七、案例分析 - **游戏开发**:介绍如何使用ActionScript3.0开发简单游戏,如平台游戏、射击游戏等。 - **多媒体...

    Actionscript3 中文 英文版

    AS3的网络功能也非常强大,可以用来处理HTTP请求、Socket通信、本地文件系统操作等。URLLoader和URLRequest类用于发送HTTP请求,XML和JSON数据的解析也很方便。对于实时通信,AS3支持Socket和SharedObject,后者允许...

    Flex+ActionScript+JAVA等学习教程集合

    3. **BlazeDS详解**:BlazeDS支持HTTP和WebSocket协议,提供MessageBroker服务,可以将Flex的Remoting和LiveCycle Data Services功能引入到Java应用中。它还包括一个频道配置文件,用于定义客户端和服务器间的通信...

    ActionScript开发人员指南中文版

    在ActionScript中使用XML的示例:从Internet加载RSS数据 第章:使用本机JSON功能 JSONAPI概述 定义自定义JSON行为 第章:处理事件 事件处理基础知识 ActionScript事件处理与早期版本事件处理的不同之处 事件流 事件...

    ActionScript3.0权威指南与殿堂之路

    这部分内容将涉及HTTP请求、数据解析以及错误处理。 7. **音频和视频处理**:ActionScript 3.0对音频和视频的支持也得到了显著提升。书中的这一部分可能会讲解如何加载、播放、控制媒体,并处理媒体数据。 8. **...

    ActionScript 3.0编程技术实战宝典pdf

    书籍会介绍如何进行HTTP和FTP请求,以及如何使用AMF(Action Message Format)进行数据交换。对于游戏开发,可能会涉及网络对战和多人合作的实现。 最后,书中可能还会涵盖ActionScript 3.0的性能优化技巧和调试...

    ActionScript 编程基础

    8. **网络通信**:ActionScript提供了XMLSocket和URLLoader类,用于实现客户端与服务器之间的数据交换,如发送HTTP请求和接收XML或JSON响应。 9. **错误处理**:学习如何使用try...catch语句来捕获和处理运行时错误...

Global site tag (gtag.js) - Google Analytics