分享
 
 
 

FLASH AS3 中使用URLRequest 和URLLoader 与服务器交互

王朝other·作者佚名  2006-11-24
窄屏简体版  字體: |||超大  

AS3 中使用URLRequest 和URLLoader 与服务器交互

AS3 中使用 URLLoader 与 URLRequest 取代了先前版本 LoadVars 方法. 初学者可能又会迷糊了.

在现在帮助系统没有完善的情况下 (Flash 9 没有帮助, Flex Builder 2 的只有英文), 这里写篇简单的教程, 方便大家往 AS3 过渡.

在 AS3 中, 有关于网络操作的内置类全部在 flash.net 里. 下面是本教程要用到的类的清单 :

URLLoader : 用于从网络或者本地读取文件, 可以通过设置他的 dataFormat 属性改变收到的文本类型.

与 AS2 的 LoadVars 不同的是, 他的默认值 URLLoaderDataFormat.TEXT 即纯文本格式, 所以在读取外部文本变量的时候得修改一下他的 dataFormat 为URLLoaderDataFormat.VARIABLES. 不过在 AS2 中没有该属性, 取代的是contentType 属性.

URLRequest : 用于传递变量到服务器, 以及 URLLoader 要 load 的目标路径. 可以通过设置他的 contentType 属性改变发送到服务器的变量类型, 默认是 application/x-form-urlencoding, 也就是 URLEncode 编码.

URLVariables : 用于配置传递到服务器变量的键 / 值集合, 如user1=Kakera&user2=Eigo.

URLLoaderDataFormat : 用于设置 URLLoader 读取文件的类型, 有 TEXT (纯文本), VARIABLES (URLEncoding 的键 / 值集合), BINARY (2 进制格式), URLLoader 会根据相应的类型进行解码操作, 如解码 URLEncode

同时还有其他不常用的 :

URLRequestMethod : 决定使用哪种方式传递数据到服务器, POST 或者 GET.

URLReqeustHeader : 用于配置传递到服务端的 HTTP 标头.

值得一提的是, URLLoader 还有相当完整的事件让我们来获取读取数据的状态, 下面是有关 URLLoader 事件的清单.

complete : 使用 URLLoader.load() 方法后, 数据完全加载完毕时触发, 通常如果能够触发这个事件的话, 说明你的程序没有问题.

httpStatus : 使用 URLLoader.load() 方法后, 获取 HTTP 状态代码时触发, 通过判断他的 state 属性我们可以获得远程文件的加载状态. 成功 (200), 没有权限 (403), 找不到文件 (404), 服务器内部错误 (500) 等等. 这个事件总是在 compelete 之前被触发.

ioError : 使用 URLLoader.load() 方法时, 发生致命错误时触发, 我还没碰到过..

open : 使用 URLLoader.load() 方法后, 开始从服务器下载数据时触发一次, 此时的 URLLoader.bytesLoaded 一定是 0.

progress : 使用 URLLoader.load() 方法后, 在从服务器下载数据的过程中持续触发, 通过侦听他的变化我们可以很方便的为 URLLoader 做加载状态的显示.

securityError : FlashPlayer 的安全错误, 比如跨域加载, 从硬盘 (文件系统) 发送 / 读取服务器上的数据.

关于注册侦听器的建议

flashplayer 内置类的所有事件都有相关事件类常量来表示, 推荐使用他们来注册事件侦听器. 而所有的内置类的事件类 (Event) 全部在 flash.events 包中,如使用:

import flash.events.Event;

urlLoaderInstance.addEventListener(Event.COMPLETE, completeHandler);

来代替

urlLoaderInstance.addEventListener("complete", completeHandler);

下面是 URLLoader 支持的事件所对应类的清单, 他们可以在 Flex Builder 2 的文档中找到:

complete : Event.COMPLETE

httpStatus : HTTPStatusEvent.HTTP_STATUS

ioError : IOErrorEvent.IO_ERROR

open : Event.OPEN

progress : ProgressEvent.PROGRESS

securityError : SecurityErrorEvent.SECURITY_ERROR

然后下面是使用 URLLoader 的一些简单的例子

1. 单纯的读取服务器或者硬盘上同目录下叫 Variables.txt 文本文件, 文本的内容是:

user1=Kakera&user2=Eigo&user3=Keirago

LoadVariablesOnly.fla

代码拷贝框

import flash.net.URLLoader;

import flash.net.URLRequest;

import flash.net.URLLoaderDataFormat;

import flash.net.URLVariables;

import flash.events.Event;

import flash.events.HTTPStatusEvent;

import flash.events.IOErrorEvent;

import flash.events.ProgressEvent;

import flash.events.SecurityErrorEvent;

//

// 配置 URLRequest, 设置目标路径等

//

var request:URLRequest = new URLRequest("Variables.txt");

//

// 配置 URLLoader, 注册侦听器等

//

var loader:URLLoader = new URLLoader();

loader.dataFormat = URLLoaderDataFormat.VARIABLES;

loader.addEventListener(Event.COMPLETE, loader_complete);

loader.addEventListener(Event.OPEN, loader_open);

loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);

loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);

loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);

loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);

loader.load(request);

function loader_complete (e:Event):void {

trace("Event.COMPLETE");

trace("目标文件的原始数据 (纯文本) : " + loader.data);

//

// 使用 URLVariables 处理原始数据并进行遍历同时输出数据

//

var variables:URLVariables = new URLVariables(loader.data);

for (var i in variables) {

trace(i + " : " + variables[i]);

}

}

function loader_open (e:Event):void {

trace("Event.OPEN");

trace("读取了的字节 : " + loader.bytesLoaded);

}

function loader_httpStatus (e:HTTPStatusEvent):void {

trace("HTTPStatusEvent.HTTP_STATUS");

trace("HTTP 状态代码 : " + e.state);

}

function loader_progress (e:ProgressEvent):void {

trace("ProgressEvent.PROGRESS");

trace("读取了的字节 : " + loader.bytesLoaded);

trace("文件总字节 : " + loader.bytesTotal);

}

function loader_security (e:SecurityErrorEvent):void {

trace("SecurityErrorEvent.SECURITY_ERROR");

}

function loader_ioError (e:IOErrorEvent):void {

trace("IOErrorEvent.IO_ERROR");

}

[Ctrl+A 全部选择 然后拷贝]

2. 提交数据到 ServerSide.asp, 并输出服务器的返回值

ServerSide.asp

代码拷贝框

<%@LANGUAGE="JSCRIPT" CODEPAGE="65001"%>

<%

//

// 全局 Header, 设置编码, 以及缓存

//

with (Response) {

Charset = "utf-8";

Buffer = true;

Expires = -10;

ContentType = "text/plain";

}

var buffer = "列出所有服务端接收到的变量 : \n";

var i;

var e = new Enumerator(Request.Form);

//

// 遍历集合

//

for (; !e.atEnd(); e.moveNext()) {

i = e.item();

buffer += String(i) + " : " + String(Request.Form(i)) + "\n";

}

Response.Write(buffer);

%>

[Ctrl+A 全部选择 然后拷贝]

SendAndLoadVariables.fla

代码拷贝框

import flash.net.URLLoader;

import flash.net.URLRequest;

import flash.net.URLLoaderDataFormat;

import flash.net.URLVariables;

import flash.events.Event;

import flash.events.HTTPStatusEvent;

import flash.events.IOErrorEvent;

import flash.events.ProgressEvent;

import flash.events.SecurityErrorEvent;

//

// 配置 URLVariables, 设置传递到服务器的数据

//

var variables:URLVariables = new URLVariables();

variables.userName = "Kakera";

variables.password = "********";

//

// 配置 URLRequest, 设置目标路径, 设置提交的数据, 方法 (POST / GET)

//

var request:URLRequest = new URLRequest("http://localhost/urlloadersample/ServerSide.asp");

request.data = variables;

request.method = URLRequestMethod.POST;

//

// 配置 URLLoader, 注册侦听器等

//

var loader:URLLoader = new URLLoader();

//

// 服务端将要返回的是纯文本数据

//

loader.dataFormat = URLLoaderDataFormat.TEXT;

loader.addEventListener(Event.COMPLETE, loader_complete);

loader.addEventListener(Event.OPEN, loader_open);

loader.addEventListener(HTTPStatusEvent.HTTP_STATUS, loader_httpStatus);

loader.addEventListener(ProgressEvent.PROGRESS, loader_progress);

loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, loader_security);

loader.addEventListener(IOErrorEvent.IO_ERROR, loader_ioError);

loader.load(request);

function loader_complete (e:Event):void {

trace("Event.COMPLETE");

trace("目标文件的原始数据 (纯文本) : \n" + loader.data);

}

function loader_open (e:Event):void {

trace("Event.OPEN");

trace("读取了的字节 : " + loader.bytesLoaded);

}

function loader_httpStatus (e:HTTPStatusEvent):void {

trace("HTTPStatusEvent.HTTP_STATUS");

trace("HTTP 状态代码 : " + e.status);

}

function loader_progress (e:ProgressEvent):void {

trace("ProgressEvent.PROGRESS");

trace("读取了的字节 : " + loader.bytesLoaded);

trace("文件总字节 : " + loader.bytesTotal);

}

function loader_security (e:SecurityErrorEvent):void {

trace("SecurityErrorEvent.SECURITY_ERROR

[1] [2] 下一页

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有