as3与后台通讯(php)

目前flash在各方个面的应用越来越广,而flash也不单只是注重自身绚丽的效果,也需要和外界程序交换数据,以实现更强大的功能,随着as3 的到来,flash和外部交互的方式也越来越简便和合理化。今天就在这里谈谈as3和后台数据的交互(这里选择as3+php架构,其他配置同理)。

在as3里,原来的loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoader,URLLoaderDataFormat,URLStream,URLVariables。
URLLoader 类和原来的loadVars类似,是加载文本,2进制数据,xml,URL数据等信息的有力工具。URLLoader接受一个URLRequest 作为构造的参数,使用load方法来加载数据。URLLoder也可以进行监听,这点也loadVars不同,一个简单的示例如下

// ////////////////actionscript code//////////////////////////////////////////
// 声明一个URLLoader
var loader:URLLoader = new URLLoader();
// 监听数载加载完成事件
loader.addEventListener(Event.COMPLETE,loaded);
// 事件相应函数
function loaded(e:Event) {
trace(loader.data);
// output : this data is from php!
}
// 加载test.php
loader.load( new URLRequest( ” test.php ” ));



从上面的示例可以看出,as3和后台交互是多么简单,但这只是单项的交互,如果要flash向后台发送数据并传回数据该如何去做呢?这个时候你可能会把代码该成这样:

// actionscript code
var loader:URLLoader = new URLLoader();
loader.data = … {message: ” hello im flash! ” } ;
loader.addEventListener(Event.COMPLETE,loaded);
function loaded(e:Event) {
trace(loader.data);
// output : this is flash say:
}
loader.load( new URLRequest( “test.php” ));



看 看输出的代码,你得到了什么?是的,信息并没有传输到php,你还是在用loadVars的方式试图传送数据,但as3里已经不是这样了, URLLoader的data只有在数据被下载完时才会被初始化,在数据没有加载完成时,它是等于null的,也就是说,它只包含接受到的数据,而不管要发送的数据,那么,as3里如何向后台发送数据呢?使用URLVariables。URLVariables允许你在flash和后台程序间传输变量, as3里已经把发送和接受数据分离,再也不像as2的loadVars那样,一个类通吃所有了,那么这个URLVariables如何送要发送的数据呢?
你可能找遍了URLLoader的文档也没有发现与它相关的东西,是的URLLoader并不和URLVariables有关联,而是 URLRequest在使用它,URLRequest包含整个http请求的所有信息,所以我们要发送的数据要放在这里,URLRequest有一个 data属性他接受一个object类型的参数,这就是我们要发送的数据。同时你可能还注意到了,URLRequest也管理用什么样的方式来发送 http请求,它的method属性接受一个字符参数,post或者是get。好了,现在我们来看看它们是怎么工作的:


var loader:URLLoader = new URLLoader();
// 声明一个URLRequest
var url:URLRequest = new URLRequest( “test.php” );
// 设置传输方式为POST
url.method = URLRequestMethod.POST;
// 声明一个URLVariables
var values:URLVariables = new URLVariables();
// 设置要传输的信息
values.message = ” hello im flash! ” ;
url.data = values;
loader.addEventListener(Event.COMPLETE,loaded);
function loaded(e:Event) {
trace(loader.data);
// output : this is flash say:hello im flash!
}
loader.load(url);



发表评论

您的电子邮箱地址不会被公开。

2 + 3 =