设为首页 收藏本站
查看: 564|回复: 0

[经验分享] AS3与PHP通信

[复制链接]
YunVN网友  发表于 2018-12-21 10:39:56 |阅读模式
  目前flash在各方个面的应用越来越广,而flash也不单只是注重自身绚丽的效果,也需要和外界程序交换数据,以实现更强大的功能,随着as3的到来,flash和外部交互的方式也越来越简便和合理化。今天就在这里谈谈as3和后台数据的交互(这里选择as3 php架构,其他配置同理)。
  在as3里,原来的loadVars方法已经被废弃,而改用一系列的类来实现与后台数据的交互,这些类是:URLLoader,URLLoaderDataFormat,URLStream,URLVariables。
  URLLoader 类和原来的loadVars类似,是加载文本,2进制数据,xml,URL数据等信息的有力工具。URLLoader接受一个URLRequest 作为构造的参数,使用load方法来加载数据。URLLoder也可以进行监听,这点也loadVars不同,一个简单的示例如下:
  1. //////////////////actionscript code//////////////////////////////////////////
  2. //声明一个URLLoader
  3. var loader:URLLoader = new URLLoader();
  4. //监听数载加载完成事件
  5. loader.addEventListener(Event.COMPLETE,loaded);
  6. //事件相应函数
  7. function loaded(e:Event){
  8. trace(loader.data);
  9. // output : this data is from php!
  10. }
  11. //加载test.php
  12. loader.load(new URLRequest("test.php"));
  1. // ////////////////test.php code/////////////////////////////////
  2.
  从上面的示例可以看出,as3和后台交互是多么简单,但这只是单项的交互,如果要flash向后台发送数据并传回数据该如何去做呢?这个时候你可能会把代码该成这样:
  1. //actionscript code
  2. var loader:URLLoader = new URLLoader();
  3. loader.data={message:"hello im flash!"};
  4. loader.addEventListener(Event.COMPLETE,loaded);
  5. function loaded(e:Event){
  6. trace(loader.data);
  7. // output : this is flash say:
  8. }
  9. loader.load(new URLRequest("test.php"));
  1. //test.php code//
  2.
  看看输出的代码,你得到了什么?是的,信息并没有传输到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。好了,现在我们来看看它们是怎么工作的:
  1. //actionscript code
  2. var loader:URLLoader = new URLLoader();
  3. //声明一个URLRequest
  4. var url:URLRequest = new URLRequest("test.php");
  5. //设置传输方式为POST
  6. url.method = URLRequestMethod.POST;
  7. //声明一个URLVariables
  8. var values:URLVariables = new URLVariables();
  9. //设置要传输的信息
  10. values.message="hello im flash!";
  11. url.data = values;
  12. loader.addEventListener(Event.COMPLETE,loaded);
  13. function loaded(e:Event){
  14. trace(loader.data);
  15. // output : this is flash say:hello im flash!
  16. }
  17. loader.load(url);
  1. //test.php code//
  2.
  怎么样,是不是也很方便的实现了as3和后台的数据传输?恩,现在我们的程序可以双向交互数据了,但这只是一些简单的数据,如果你要传输带有结构的数据,(熟悉as2的人都知道loadVars可以自动解析下载数据的结构),让我们先按loadVars的方式来尝试下,看看URLLoader是不是能自动的解析下载的数据。
  1. //actionscript code
  2. var loader:URLLoader = new URLLoader();
  3. //声明一个URLRequest
  4. var url:URLRequest = new URLRequest("test.php");
  5. //设置传输方式为POST
  6. url.method = URLRequestMethod.POST;
  7. //声明一个URLVariables
  8. var values:URLVariables = new URLVariables();
  9. //设置要传输的信息
  10. values.message="hello im flash!";
  11. url.data = values;
  12. loader.addEventListener(Event.COMPLETE,loaded);
  13. function loaded(e:Event){
  14. trace(loader.data);
  15. //outPut: phpMessage=im php message!&flashMessage=hello im flash!
  16. trace(loader.data.phpMessage);
  17. // thorw Error;
  18. trace(loader.data.flashMessage);
  19. // thorw Error;
  20. }
  21. loader.load(url);
  1. //test.php code//
  2.
  可以看到,数据被完全下载下来了,但是却没有被解析,还抛出了异常,那么是不是URLLoader就不能自动解析数据了呢?不是,相反URLLoader 提供了多种数据解析方式供你选择。这些数据解析方式都在URLLoaderDataFormat里,他们是:BINARY-以2进制的方式解析 TEXT-以文本的方式解析 VARIABLES-以变量-值配对的方式解析。URLLoader的dataFormat属性提供了对解析方式的选择,好,我们再来修改下程序使它变的更完美些:
  1. //actionscript code
  2. var loader:URLLoader = new URLLoader();
  3. //声明一个URLRequest
  4. var url:URLRequest = new URLRequest("test.php");
  5. //设置传输方式为POST
  6. url.method = URLRequestMethod.POST;
  7. //声明一个URLVariables
  8. var values:URLVariables = new URLVariables();
  9. //设置要传输的信息
  10. values.message="hello im flash!";
  11. url.data = values;
  12. //设置以变量-值配对的方式解析数据
  13. loader.dataFormat = URLLoaderDataFormat.VARIABLES;
  14. loader.addEventListener(Event.COMPLETE,loaded);
  15. function loaded(e:Event){
  16. trace(loader.data);
  17. //outPut: phpMessage=im php message!&flashMessage=hello im flash!
  18. trace(loader.data.phpMessage);
  19. // im php message!
  20. trace(loader.data.flashMessage);
  21. // hello im flash!
  22. }
  23. loader.load(url);
  1. //test.php code//
  2.
  以上这些就是as3里和后台交互的基础内容,现在你可以在as3里创建这样的交互,获取动态数据来丰富你的程序,在你开始自己动手实验之前,还有一些东西值得注意:
  1,记得捕获和处理异常(上述的例子里都是假定在完美的测试环境下运行,所以没有加上异常捕获和处理的代码,但现实中你可能会遇到各种各样的情况)URLLoader可能引发好几种异常情况(详细请参见说明文档)
  你应该通过监听ioError和securityError事件,或者通过try-catch来处理他们,即使你确信不会发生这样的问题。
  2,文件的编码,这是个常见的问题,经常很多数据变成了乱码,或者解析出错,都是因为编码的问题,我的做法是确保发送的数据和后台传回的数据都是UTF-8格式(因为flash默认编码为utf-8)
  最后希望这篇文章能对你有所帮助,也欢迎你留言讨论相关的问题。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-653933-1-1.html 上篇帖子: jsp+php-chding 下篇帖子: php的session机制 和 屏蔽php文件中的notice信息
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表