-
AS3与PHP-交互示例
在as3里,原来的loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoader,URLLoaderDataFormat,URLStream,URLVariables。
URLLoader 类和原来的loadVars类似,是加载文本,2进制数据,xml,URL数据等信息的有力工具。URLLoader接受一个URLRequest 作为构造的参数,使用load方法来加载数据。URLLoder也可以进行监听,这点也loadVars不同,一个简单的示例如下://AS3代码 //声明一个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"));
<?php # - test.php //声明一个变量并赋给一个字符串 $data ='this data is form php!'; //输出这个变量给flash echo $data; ?>
从上面的示例可以看出,as3和后台交互是多么简单,但这只是单项的交互,如果要flash向后台发送数据并传回数据该如何去做呢?这个时候你可能会把代码该成这样:
//AS3代码 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 # - test.php $flashData = $_POST['message']; echo "this is flash say:$flashData"; ?>
看看输出的代码,你得到了什么?是的,信息并没有传输到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。好了,现在我们来看看它们是怎么工作的://AS3代码 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);
<?php # - test.php $flashData = $_POST['message']; echo "this is flash say:$flashData"; ?>
怎么样,是不是也很方便的实现了as3和后台的数据传输?恩,现在我们的程序可以双向交互数据了,但这只是一些简单的数据,如果你要传输带有结构的数据,(熟悉as2的人都知道loadVars可以自动解析下载数据的结构),让我们先按loadVars的方式来尝试下,看看URLLoader是不是能自动的解析下载的数据。
//AS3代码 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: phpMessage=im php message!&flashMessage=hello im flash! trace(loader.data.phpMessage); // thorw Error; trace(loader.data.flashMessage); // thorw Error; } loader.load(url);
<?php # - test.php $flashData = $_POST['message']; $phpMessage = 'im php message!'; echo "phpMessage=$phpMessage&flashMessage=$flashData"; ?>
可以看到,数据被完全下载下来了,但是却没有被解析,还抛出了异常,那么是不是URLLoader就不能自动解析数据了呢?不是,相反URLLoader 提供了多种数据解析方式供你选择。这些数据解析方式都在URLLoaderDataFormat里,他们是:BINARY-以2进制的方式解析 TEXT-以文本的方式解析 VARIABLES-以变量-值配对的方式解析。URLLoader的dataFormat属性提供了对解析方式的选择,好,我们再来修改下程序使它变的更完美些:
//AS3代码 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.dataFormat = URLLoaderDataFormat.VARIABLES; loader.addEventListener(Event.COMPLETE,loaded); function loaded(e:Event){ trace(loader.data); //outPut: phpMessage=im php message!&flashMessage=hello im flash! trace(loader.data.phpMessage); // im php message! trace(loader.data.flashMessage); // hello im flash! } loader.load(url);
<?php # - test.php $flashData = $_POST['message']; $phpMessage = 'im php message!'; echo "phpMessage=$phpMessage&flashMessage=$flashData"; ?>
以上这些就是as3里和后台交互的基础内容,现在你可以在as3里创建这样的交互,获取动态数据来丰富你的程序,在你开始自己动手实验之前,还有一些东西值得注意:
1,记得捕获和处理异常(上述的例子里都是假定在完美的测试环境下运行,所以没有加上异常捕获和处理的代码,但现实中你可能会遇到各种各样的情况)URLLoader可能引发好几种异常情况(详细请参见说明文档)
你应该通过监听ioError和securityError事件,或者通过try-catch来处理他们,即使你确信不会发生这样的问题。
2,文件的编码,这是个常见的问题,经常很多数据变成了乱码,或者解析出错,都是因为编码的问题,我的做法是确保发送的数据和后台传回的数据都是UTF-8格式(因为flash默认编码为utf-8)
最后希望这篇文章能对你有所帮助,也欢迎你留言讨论相关的问题。
留下评论
日历
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| « 四 | ||||||
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
最近文章
我们都是90后
链接
最近评论
- 鸟人网 www.BirdUser.com - 鸟人网 博客 在 Theme Codename H 安装及修改指导 上的评论
- Paulie 在 Books 上的评论
- 张晓东 在 魔兽五周年:高三MM的翻唱《星海槛歌》 上的评论
- Knightby 在 Books 上的评论
- CheonNii 在 Books 上的评论