AS3使用URLRequest和URLLoader服务器交互(转载)
上一篇 / 下一篇 2007-05-22 10:15:06 / 个人分类:Flash 文章/教程
查看( 466 ) / 评论( 0 ) / 评分( 0 / 0 )
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 包中,如使用:
window.attachEvent("onload",function (){AutoSizeDIV('CODE_7643')}) 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=KeiragoLoadVariablesOnly.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");
}
2. 提交数据到 ServerSide.asp, 并输出服务器的返回值
ServerSide.asp <%@LANGUAGE="Jscrīpt" 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
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");
}
function loader_ioError (e:IOErrorEvent):void {
trace("IOErrorEvent.IO_ERROR");
}
分享到:
相关推荐
AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 URLRequest 和 URLLoader 与服务器交互AS3 中使用 ...
AS3 中使用 URLRequest 和 URLLoader 与服务器交互
var Request:URLRequest = new URLRequest(url); Request.method=method; Request.data = vars; trace(vars); loader = new URLLoader(Request); callBack = _returnMethod; loader....
简单的读取XML:加载部分var myXML:XML = new XML(); var XML_URL:String = "dat.xml";...var myXMLURL:URLRequest = new URLRequest(XML_URL); var myLoader:URLLoader = new URLLoader(myXMLURL);
//文本提示:动态文本框 ts_txt //"非你莫属.mp3 和fla在同一目录,如果不在同一目录要使用完整的绝对路径。 var s:Sound = new Sound() var req:URLRequest=new URLRequest("非你莫属.mp3")
在ActionScript 3.0中,使用URLLoader和URLRequest类来加载外部文件。 加载成功的文件可使用特定类来访问数据,具体使用何类,取决于加载数据的数据类型。 1> 比如如果加载数据的格式为名称值对类型,则可以使用...
urlLoader = new flash.net.URLLoader(new flash.net.URLRequest("db_integration/php/handler.php")); urlLoader.addEventListener(flash.events.IOErrorEvent.IO_ERROR, function (arg1:flash.events.Event):* ...
与asp js交互数据实现 ------------------------------ import fl.controls.Button; import fl.core.UIComponent; var TF : TextFormat = new TextFormat(); TF.size = 16; TF.color = 0x0000ff; key.setStyle(...
id3_txt.text = "歌名:" + tar.id3.songName + "\n" + "歌手:" + tar.id3.artist + "\n" + "专辑:" + tar.id3.album; } //////////////////////////////////////////////////////////////////// ////// ...
第3章 为android、blackberry和ios设备构建air应用程序 65 3.1 air应用程序描述符文件 65 3.1.1 在air应用程序描述符文件中设置属性 66 3.1.2 手动编辑hello world app的应用程序描述符文件 66 3.1.3 blackberry...
var loader : Loader = new Loader(); var context : LoaderContext = new LoaderContext(); context.applicationDomain = new ApplicationDomain(Application...loader.load(new URLRequest("loaded.swf"), context);
程序中运用到了动态绘制波形图的类Graphics类,以及URLRequest类来播放声音,还有Sound、SoundChannel、SoundMixer等类,test.mp3文件自备,相信对大家有帮助
通过网页地址URL的参数传递。 例如:http://localhost:8080/text.mxml?myName=good&myValue=goods 在mxml里面获取到good同goods
CurlDSL目前仅支持HTTP和HTTPS。要求Swift 5.1或以上iOS 13或以上macOS 10.15或更高版本tvOS 13或以上安装您可以通过安装该软件包。用法只有一个重要的对象CURL 。 您只需将cURL命令传递给它即可。 例如: try CURL...
HttpUtility HttpUtility是一个轻量级的开源MIT许可证... 有关使用和安装说明,请访问其网站。 要使用CocoaPods将HttpUtility集成到您的Xcode项目中,请在您的Podfile中指定它: pod 'HttpUtility', '~> 1.2'使用Http
3. for each ( var i:Object in ac ){ 4. bar.addItem( i ); 5. } 6. // fantastic ! // 7. var bar:ListCollectionView = new ListCollectionView( ListCollectionView( ac ).list ); 3. 打开 URL 1. navigateToURL...
图片(文件)下载,核心方法是 urllib.urlrequest 模块的 urlretrieve()方法 urlretrieve(url, filename=None, reporthook=None, data=None) url: 文件url filename: 保存到本地时,使用的文件(路径)名称 reporthook...
根据我们最常遇到的网络使用案例来定制库。 我们将继续根据构建的所有应用程序的共同需求添加功能。关键概念HTTP-包含标准的HTTP定义和类型。 如果您觉得这里缺少东西,请提交拉取请求! 请求-一种结构,用于定义...
import Starscream连接到WebSocket服务器导入后,您可以打开与WebSocket服务器的连接。 请注意, socket可能是最好的属性,因此设置后不会立即释放。 var request = URLRequest ( url : URL ( string : " ...