`

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开发技术大全

    第5章ActionScript3.0中的String对象 104 5.1创建String对象 104 5.2字符串处理 105 5.2.1字符处理 105 5.2.2字符串比较 107 5.2.3裁割与连接 108 5.2.4查找、匹配与替换 110 5.2.5提取子串 112 5.2.6大小写转换 113...

    ActionScript开发人员指南中文版

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

    nexuslib-as3:一个Actionscript库,提供强大的反射,序列化,种子随机数生成,加密,联网等功能

    枚举,随机,反射,序列化,加密,音频系统,HTTP请求。 反射库专门用于生产环境,目前正在生产环境中使用。 入门 下载,或在您的项目中克隆仓库和参考。 外部依赖 没有任何 blooddy-crypto与nexuslib.swc静态链接...

    springCloud

    Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息。接下来,Feign会完全代理HTTP的请求,我们只需要像调用方法一样调用它就可以完成服务请求。 简而言之:...

    将 Flex 集成到 Java EE 应用程序的最佳实践(完整源代码)

    现有的 Java EE 应用 假定我们已经拥有了一个管理雇员信息的...可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法: 清单 13. 定义 flexServiceRO ...

    看完Flex就可以做出一个小游戏

    Design 视图:按钮,图片 Source 视图 MXML/ActionScript 3.0 动态效果:移动,旋转,放大,淡入淡出效果 数学函数:随机数,四舍五入, 定时器:创建,定时调用...Http请求 HttpService, 报表:饼图,折线图,柱状图

    FlexUrlLoader-开源

    基于自定义套接字的HTTP请求库,允许使用以Flex / ActionScript 3编写的GET,POST,PUT和DELETE请求方法。

    Spring攻略(第二版 中文高清版).part2

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    Spring攻略(第二版 中文高清版).part1

    10.7 将依赖注入带给你的ActionScript客户 434 10.7.1 问题 434 10.7.2 解决方案 434 10.7.3 工作原理 435 10.8 小结 439 第11章 Grails 441 11.1 获取和安装Grails 441 11.1.1 问题 441 11.1.2 ...

    +Flex+集成到+Java+EE+应用程序的最佳实践(完整源代码)

    资源简介现有的 Java EE 应用 假定我们已经拥有了一个管理雇员...可以通过 ActionScript 编码创建该对象,也可以直接在 MXML 中定义一个 RemoteObject 对象,并列出其所有的方法: 清单 13. 定义 flexServiceRO ...

    Syntaxtic !「Syntaxtic!」-crx插件

    支持的语言:Actionscript(.as .actionscript)Bash(.sh)C ++(.cpp .h .cc)C#(.cs)C(.c .h)Clojure(.clj)CSS(.css)Diff(.diff .patch)Erlang(.erl)Groovy(.groovy)Go(.go)JavaScript(.js)...

    java开源包1

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    JAVA上百实例源码以及开源项目

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    JAVA上百实例源码以及开源项目源代码

     当用户发送第一次请求的时候,验证用户登录,创建一个该qq号和服务器端保持通讯连接得线程,启动该通讯线程,通讯完毕,关闭Scoket。  QQ客户端登录界面,中部有三个JPanel,有一个叫选项卡窗口管理。还可以更新...

    java开源包11

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包2

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包3

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

    java开源包6

    提供了一个基于对象模型的 ActionScript 字节码,并提供了 ActionScript 字节码统计工具。 Java类重加载工具 JReloader JReloader 是一个用来重新加载class文件而无需重启JVM的工具。 PHPJava Bridge php调用java...

Global site tag (gtag.js) - Google Analytics