加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:54:07 所属栏目:百科 来源:网络整理
导读:AS3?中使用?URLLoader?与?URLRequest?取代了先前版本?LoadVars?方法.?初学者可能又会迷糊了. 在现在帮助系统没有完善的情况下?(Flash?9?没有帮助,?Flex?Builder?2?的只有英文),?这里写篇简单的教程,?方便大家往?AS3?过渡. 在?AS3?中,?有关于网络操作的内置类
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",sans-serif; font-size:14px; line-height:28px; text-align:left">下面是?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.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.bytesTotal);
function?loader_security?(e:SecurityErrorEvent):void?{
trace("SecurityErrorEvent.SECURITY_ERROR");
function?loader_ioError?(e:IOErrorEvent):void?{
trace("IOErrorEvent.IO_ERROR");
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);
%>
SendAndLoadVariables.fla
//?配置?URLVariables,?设置传递到服务器的数据
var?variables:URLVariables?=?new?URLVariables();
variables.userName?=?"Kakera";
variables.password?=?"********";
var?request:URLRequest?=?new?URLRequest("http://localhost/urlloadersample/ServerSide.asp");
request.data?=?variables;
request.method?=?URLRequestMethod.POST;
//?服务端将要返回的是纯文本数据
loader.dataFormat?=?URLLoaderDataFormat.TEXT;
trace("目标文件的原始数据?(纯文本)?:?n"?+?loader.data);
trace("HTTP?状态代码?:?"?+?e.status);
点击下载本教程以及教程的源码

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读