首页 后端开发 php教程 as3与php交互兑现总结

as3与php交互兑现总结

Jun 13, 2016 am 10:38 AM

as3与php交互实现总结

?

转自:http://blog.csdn.net/ahstudy/article/details/6996824

目前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"));
// ////////////////test.php code/////////////////////////////////
//声明一个变量并赋给一个字符串
$data ='this data is form php!';
//输出这个变量给flash
echo $data;
?>
从上面的示例可以看出,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"));
//test.php code//
$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。好了,现在我们来看看它们是怎么工作的:


//actionscript code
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);
//test.php code//
$flashData = $_POST['message'];
echo "this is flash say:$flashData";
?>
怎么样,是不是也很方便的实现了as3和后台的数据传输?恩,现在我们的程序可以双向交互数据了,但这只是一些简单的数据,如果你要传输带有结构的 数据,(熟悉as2的人都知道loadVars可以自动解析下载数据的结构),让我们先按loadVars的方式来尝试下,看看URLLoader是不是 能自动的解析下载的数据。

//actionscript code
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);
//test.php code//
$flashData = $_POST['message'];
$phpMessage = 'im php message!';
echo "phpMessage=$phpMessage&flashMessage=$flashData";
?>
可以看到,数据被完全下载下来了,但是却没有被解析,还抛出了异常,那么是不是URLLoader就不能自动解析数据了呢?不是,相反 URLLoader提供了多种数据解析方式供你选择。这些数据解析方式都在URLLoaderDataFormat里,他们是:BINARY-以2进制的 方式解析 TEXT-以文本的方式解析 VARIABLES-以变量-值配对的方式解析。URLLoader的dataFormat属性提供了对解析方式的选择,好,我们再来修改下程序使它变的 更完美些:


//actionscript code
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);
//test.php code//
$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)
最后希望这篇文章能对你有所帮助,也欢迎你留言讨论相关的问题。

?

第一种 不传参 直接读取PHP文件

btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
??????? var urlLoader:URLLoader=new URLLoader();
??????????????? urlLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
??????? urlLoader.load(new URLRequest("http://localhost/as3/url2.php"));
??????? urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
??????? var mydata:URLVariables=URLVariables((evt.currentTarget as URLLoader).data);
??????????????? mytxt.text="国家是:"+mydata.state+"\n";
??????????????? mytxt.text+="var1是:"+mydata.var1;
}
php端代码:

??????? $state="中华人民共和国";
??????? $var1="我恨你";
??????? echo "state=".$state."&var1=".$var1;
?>

?

第二种 无参数? 读取XML文件

?

btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
??????? var urlLoader:URLLoader=new URLLoader();
??????? urlLoader.load(new URLRequest("data.xml"));
??????? urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
??????? var mydatas:XML=XML((evt.currentTarget as URLLoader).data);
??????????????? mytxt.text=mydatas.c1.toString()+","+mydatas.c2.toString();
}
xml文件内容:


??????? 北京
??????? 上海

上述代码结果:
北京,上海

?

第三种 无参数 PHP生成XML文件

?

btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
??????? var urlLoader:URLLoader=new URLLoader();
??????? urlLoader.load(new URLRequest("http://localhost/as3/xml.php"));
??????? urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
??????? var mydatas:XML=XML((evt.currentTarget as URLLoader).data);
??????????????? mytxt.text=mydatas.c1.toString()+","+mydatas.c2.toString();
}
php端:

??????? //你可以使用php操作xml的函数
??????? //这里为了简单起见只是echo出来
??????? echo "";
??????? echo "";
??????? echo "北京";
??????? echo "上海";
??????? echo "
";
?>

?

第四种 GET 传参

System.useCodePage=true;
btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
??????? var urlLoader:URLLoader=new URLLoader();
??????????????? var request:URLRequest=new URLRequest();
??????????????? request.url="http://www.baidu.com/s";
??????????????? request.method=URLRequestMethod.GET;
??????????????? request.data="wd=flash";
??????? urlLoader.load(request);
??????? urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
???? mytxt.text=(evt.currentTarget as URLLoader).data;
}

第五种 POST 传参

System.useCodePage=true;
btn.addEventListener(MouseEvent.CLICK,loadTxt);
function loadTxt(evt:MouseEvent):void
{
??????? var urlLoader:URLLoader=new URLLoader();
??????????????? var request:URLRequest=new URLRequest();
??????????????? var vars:URLVariables=new URLVariables();
??????????????? vars.wd="flash";
??????????????? request.url="http://www.baidu.com/s";
??????????????? request.method=URLRequestMethod.GET;
??????????????? request.data=vars;
??????? urlLoader.load(request);
??????? urlLoader.addEventListener(Event.COMPLETE,finish);
}
function finish(evt:Event):void
{
???? mytxt.text=(evt.currentTarget as URLLoader).data;
}
这里data是URLVariables是值对,注意区别。

?

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

在Laravel中使用Flash会话数据 在Laravel中使用Flash会话数据 Mar 12, 2025 pm 05:08 PM

Laravel使用其直观的闪存方法简化了处理临时会话数据。这非常适合在您的应用程序中显示简短的消息,警报或通知。 默认情况下,数据仅针对后续请求: $请求 -

php中的卷曲:如何在REST API中使用PHP卷曲扩展 php中的卷曲:如何在REST API中使用PHP卷曲扩展 Mar 14, 2025 am 11:42 AM

PHP客户端URL(curl)扩展是开发人员的强大工具,可以与远程服务器和REST API无缝交互。通过利用Libcurl(备受尊敬的多协议文件传输库),PHP curl促进了有效的执行

简化的HTTP响应在Laravel测试中模拟了 简化的HTTP响应在Laravel测试中模拟了 Mar 12, 2025 pm 05:09 PM

Laravel 提供简洁的 HTTP 响应模拟语法,简化了 HTTP 交互测试。这种方法显着减少了代码冗余,同时使您的测试模拟更直观。 基本实现提供了多种响应类型快捷方式: use Illuminate\Support\Facades\Http; Http::fake([ 'google.com' => 'Hello World', 'github.com' => ['foo' => 'bar'], 'forge.laravel.com' =>

PHP记录:PHP日志分析的最佳实践 PHP记录:PHP日志分析的最佳实践 Mar 10, 2025 pm 02:32 PM

PHP日志记录对于监视和调试Web应用程序以及捕获关键事件,错误和运行时行为至关重要。它为系统性能提供了宝贵的见解,有助于识别问题并支持更快的故障排除

在Codecanyon上的12个最佳PHP聊天脚本 在Codecanyon上的12个最佳PHP聊天脚本 Mar 13, 2025 pm 12:08 PM

您是否想为客户最紧迫的问题提供实时的即时解决方案? 实时聊天使您可以与客户进行实时对话,并立即解决他们的问题。它允许您为您的自定义提供更快的服务

解释PHP中晚期静态结合的概念。 解释PHP中晚期静态结合的概念。 Mar 21, 2025 pm 01:33 PM

文章讨论了PHP 5.3中引入的PHP中的晚期静态结合(LSB),从而允许静态方法的运行时分辨率调用以获得更灵活的继承。 LSB的实用应用和潜在的触摸

自定义/扩展框架:如何添加自定义功能。 自定义/扩展框架:如何添加自定义功能。 Mar 28, 2025 pm 05:12 PM

本文讨论了将自定义功能添加到框架上,专注于理解体系结构,识别扩展点以及集成和调试的最佳实践。

See all articles