数据发送,接受(URLLoader类,URLRequestl类,URLVariables类)(转)

转自:http://uh.9ria.com/space.php?uid=192&do=blog&id=93
使用 URLRequest 和 URLLoader 与服务器交互 http://bbs.blueidea.com/viewthread.php?tid=2643833

不过我发现我和mirycat写的有不同的特点
所以还是发出来,呵呵 希望能对学习as3的新手有点帮助.
===========================================================
===========================================================
===========================================================
先回顾一下as2中相关的解决办法
相信大部分人用的都是LoadVars类吧

CODE:
1 var xianshi_lv = new LoadVars();
2 xianshi_lv.bianliang1 = "变量一";
3 xianshi_lv.bianliang2 = "变量二";
4 xianshi_lv.bianliang3 = "变量三";
5 xianshi_lv.sendAndLoad("http://10.7.87.222/show.asp? bianliang="+random(9999), xianshi_lv, "post");
6 xianshi_lv.onLoad = function(chenggong:Boolean) {
7 if (chenggong) {
8 trace(xianshi_lv)
9 };
}第1行:定义LoadVars对象,这家伙在as2时代几乎把所有连接外部数据的事情都做完了。无敌!
第2 3 4 行:在LoadVars对象中存储变量,直接发送到外部脚本中。
第5行:执行sendAndLoad方法,意思是send后,load回调的数据。
第6行:onLoad事件,判断load回调数据,
第7行:判断load回调是否成功。

在as2时代,LoadVars类把存储变量,连接外部数据,接受回调数据这些事情都做完了。笔者也弄很久的as2,觉得这方法不错,学习起来也很简单。
但是as3不同,为了分工清晰,把上面的存储变量,连接外部数据,接受回调数据这几个事情都分散开了。一定程度上,本人觉得有点麻烦。不知道adobe是怎么想的。也许是本人还没发现adobe的真正意图·
既然as3来了,还是按他的规矩办吧
他是什么规矩呢?
============================================================
第一部分:准备发送数据

1:考虑连接的外部url地址了。
as2中把url地址,变量,通通写到LoadVars类里面。变量少没什么,要是变量多起来,那就有点麻烦,遇上要动态修改变量那更加麻烦了。as3 索性把把这一部分又分为两块,统一到URLRequest对象里面。单纯的url地址用URLRequest.url表示,变量用 URLRequest.data表示。修改起来方便许多。
注意url地址也可以在使用URLRequest构造函数的时候写进去。
2:数据传送方法,post还是get。
as3狠了心了,要把它分的彻彻底底。把传送方法也弄到URLRequest对象里面去。用URLRequest对象的method属性表示。
同时也有两种定义改属性的方法,

CODE:
request.method = URLRequestMethod.POST;//帮助文件中多用这种定义方式
request.method = "post";以上两句是等效的。你可以试试trace(URLRequestMethod.POST)。输入是 post。
由于as3的默认method是get,建议都显示定义为post。

第二部分:发送数据
1:整合send和load,就用一个load()。
as2 中,有单独的load()和send(),还有sendAnaLoad()。个人觉得前两个函数没用,既然是和外部数据通讯,每一个与外部的连接中,都需要检查flash的状态和外部数据的状态,才能保证双方的通信正常。那么load()和send()就丢掉,用一个就行了。ADOBE把剩下的 sendAndLoad()统一改成load(),不仅逻辑结构上更加合理,就连书写都简单了一半。
相关语法:

CODE:
URLLoader () 构造函数
public 函数 URLLoader(request:URLRequest = null) 注意括号中是个URLRequest对象。已经把url地址,变量,方法都包括进去了。URLLoader对象现在执行的就是连接数据,接受数据两个事情,其他的都交给URLRequest对象管理。因为URLLoader对象还有很多事情要做,比如侦听连接数据和接受数据的情况,是否已经完成操作,或者已经完成到什么程度。在这里就大有文章了,各种各样的loading都需要URLLoader对象的bytesLoaded属性和bytesTotal 属性实现。所以说,as3的分工还是很有道理的。

下面给出准备数据,连接外部数据的典型代码.接受数据处理数据将在下一步讨论

CODE:
var request:URLRequest = new URLRequest("http://10.7.87.222/test.asp");
//request.contentType = "text/xml";//这句代码可以自己单独尝试一下。笔者初学,也没详细去研究这个。只知道传递接收xml数据的时候有用。呵呵
request.data = "bianliang=100";
request.method = "POST";

var loader:URLLoader = new URLLoader();
loader.load(request);附asp代码,需要在iis5以上服务器上测试.保存文件为 UTF-8编码,文件名为test.asp.位于站点根目录下.

CODE:
<%@LANGUAGE="JAVASCRIPT" CODEPAGE="936"%>
<%
var bianliang=Request("bianliang")
Response.Write("&biangliang="+bianliang)
Response.Write("&chenggong=chenggong")
%>第三部分:接受数据
我想提示的有两点是:
1 数据需要加载完成以后,才能被flash使用.
所以一定要判断是否加载完成
但是所用的语句与as2已经完全不同了.
as2使用onLoad事件
as3代码如下

CODE:
loader.addEventListener(Event.COMPLETE,completeHandler);
function completeHandler(event:Event):void {
trace(loader.data);
}目前大家只要认识到数据的加载情况必须用事件侦听就行了.
其实as3中的交互事件,都已经采用上面代码所有的事件侦听模式.
2 需要区分 URLRequest类的data属性与URLLoader类的data属性
前者是表示传递变量的一个集合,后者是接受到的数据的一个集合.
别搞混就行了.
====================================
如果这一部分要深入下去,涉及的东西就比较多了.
包括xml的处理,和字符串的处理.
各位可以先把上面说的东西先弄熟悉了.
然后再学习怎么处理数据,以便flash使用.
再此就不再过多叙述了,因为已经跑题了.

差不多讲完了?
NO ,我想还有个东西需要单独提出来说说
第四部分:如何组织发送的变量?
as2中的loadvars类,它是用n个属性保存变量
as3使用URLRequest类的data属性保存变量.
使用一个属性保存变量?
更绝的是,该data属性是一个object值.靠!
理论上说,我们已经可以把as3中的任意东西传送给外部脚本.
现实一点来说,
将data属性定义为一个string类型,
就已经能实现我们的简单需求了
比如传递多个变量
URLRequest.data="变量1=1&变量2=2&变量3=3",
只要会一定的字符串操作,就能很好的组织自己想发送的数据了.
站巨人肩上,我们再想一下
如果有n个变量,(n的值可以让人操作n个字符串的时候发狂.呵呵)
如果是loadvars类,那没办法,还是老老实实的一个一个写吧
as3中,怎么弄?怎么弄?怎么弄?怎么弄?怎么弄?怎么弄?
既然data属性是个object值.
又需要保存很多数据.
那么有个词已经呼之欲出了
数组!
说到这里我就卡住了,
我再考虑,数组这部分究竟就该详细的说一下 ,还是略去.
考虑2分钟.................

既然能学到今天的as3想必已经是as2老手了,数组操作不讲也罢了
如果是新手刚入门,估计您应该先去as2版块找找数组的资料
呵呵 小弟这里就偷偷懒 见谅了

最后提示一个:
如果你还是喜欢as2的书写方式。
as3还是可以满足你的。
参考URLVariables类。
代码如下:

CODE:
var variables:URLVariables = new URLVariables();
variables.exampleSessionId = new Date().getTime();
variables.exampleUserLabel = "guest";
request.data = variables;前面3句代码似曾相识吧
完全和as2的loadvars类一样,
只不过最后还是需要把URLVariables对象赋值给URLRequest对象的data属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值