as3.0利用FlashProxy类来实现js跨域访问数据的方法源代码

FlashProxy加载器详解
本文介绍了一个名为FlashProxy的Flash类库,该类库用于处理HTTP请求并接收响应数据。FlashProxy通过设置不同的请求方法(GET或POST)来加载指定页面的内容,并能够处理随机数参数以防止缓存。此外,它还提供了错误处理机制,如跨域安全错误、HTTP状态错误等。
1. /**
2. * @author Kinglong
3. * @version 0.5
4. */
5.
6. package com.klstudio.upload {
7.
8. import flash.display.*;
9. import flash.events.*;
10. import flash.net.*;
11. import flash.external.ExternalInterface;
12. import flash.system.Security;
13.
14. public class FlashProxy extends Sprite{
15.
16. private var _params:Object;
17. private var _loader:URLLoader;
18. private var _method:String;
19. private var _id:String;
20. private var _parse:Boolean;
21. private var _inited:Boolean;
22. private var _data:String;
23. private var _xml:XML;
24.
25. public function FlashProxy(){
26. Security.allowDomain('*');
27. _inited = false;
28. _data = "";
29. _parse = true;
30. _method = URLRequestMethod.POST;
31. _loader = new URLLoader();
32. configureListeners(_loader);
33. }
34.
35. public function load(page:String,params:Object=null):void{
36. if(!_inited){
37. showError("FlashProxy还没有初始化!");
38. }
39. if(page == null || page == undefined){
40. showError("page参数为必须的!");
41. return;
42. }
43. var vars:URLVariables = new URLVariables();
44. vars.tmp = Math.random();
45. if(params != null){
46. for(var key in params){
47. if(key == "tmp"){
48. continue;
49. }
50. vars[key] = params[key];
51. }
52. }
53. _loader.dataFormat = URLLoaderDataFormat.TEXT;
54. var request:URLRequest = new URLRequest(page);
55. request.method = _method;
56. request.data = vars;
57. _loader.load(request);
58. }
59.
60. public function setParse(value:Boolean):void{
61. _parse = value;
62. }
63.
64. public function setMethod(value:String):void{
65. if(value == null || value == undefined){
66. return;
67. }
68. value = StringUtil.trim(value);
69. if(value.toLocaleUpperCase() == URLRequestMethod.POST || value.toLocaleUpperCase() == URLRequestMethod.GET){
70. _method = value.toLocaleUpperCase();
71. }
72. }
73.
74. public function getData():String{
75. return _data;
76. }
77.
78. private function configureListeners(dispatcher:IEventDispatcher):void {
79. dispatcher.addEventListener(Event.COMPLETE, completeHandler);
80. dispatcher.addEventListener(Event.OPEN, openHandler);
81. dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler);
82. dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
83. dispatcher.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);
84. dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
85. }
86.
87. private function completeHandler(event:Event):void {
88. _data = _loader.data;
89. if(_parse){
90. try{
91. _xml = new XML(_data);
92. }catch(error:Error){
93. _parse = false;
94. _xml = null;
95. Tracer.debug("xml解析错误!");
96. }
97. }
98. ExternalInterface.call(_id+".onComplete");
99. }
100.
101. private function openHandler(event:Event):void {
102. ExternalInterface.call(_id+".onOpen");
103. }
104.
105. private function progressHandler(event:ProgressEvent):void {
106. ExternalInterface.call(_id+".onProgress",event.bytesLoaded,event.bytesTotal);
107. }
108.
109. private function securityErrorHandler(event:SecurityErrorEvent):void {
110. showError("读取失败!\n 不能跨域访问,可能是你在web服务端根目录下没有放置crossdomain.xml文件!");
111. }
112.
113. private function httpStatusHandler(event:HTTPStatusEvent):void {
114. showError("读取失败!\n HTTP错误代码为:"+event.status);
115. }
116.
117. private function ioErrorHandler(event:IOErrorEvent):void {
118. showError("读取失败!\n 可能是因为下列原因:\n 1.网络忙,请稍候重试!\n 2.访问的web服务端没有开启!");
119. }
120.
121. public function alert(msg:String):void{
122. navigateToURL(new URLRequest(msg));
123. }
124.
125. public function showError(msg:String):void{
126. ExternalInterface.call(_id+".onError",msg);
127. }
128. }
129.
130. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值