`

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文件内容:
<?xml version="1.0" encoding="utf-8"?>
<cities>
        <c1>北京</c1>
        <c2>上海</c2>
</cities>
上述代码结果:
北京,上海

 

第三种 无参数 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 "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
        echo "<cities>";
        echo "<c1>北京</c1>";
        echo "<c2>上海</c2>";
        echo "</cities>";
?>

 

第四种 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是值对,注意区别。

 

分享到:
评论

相关推荐

    PHP与javascript实现变量交互的示例代码

    本例是PHP和javascript交互的例子,php中的值赋给js变量中,前提是这个php变量必须有值才行,就算是假分支中。比如php中的$flags在本例中为true,如果js中false语句写成:$title_1[removed] = “&lt;?php echo $...

    与as的后台交互留言系统

    留言系统php,用于与as的后台交互等,希望给你带来更多的方便

    as3+php +sql 制作的相册 源文件

    as3 语句全部加上注释 很容易看懂 简易教程 旨在说明as3与php之间的交互

    只要5分: AS3.0 在线录音并上传,转码MP3,二次压缩上传,带播放功能

    只是使用的话,你只需要,看rec.php(调用flash的,通过js与flash交互,可以知道flash的各种状态,交互函数丰富);uploadSound.php(上传的服务器端程序,用于存储文件的);MP3数据的传输是gzip压缩的,服务器端存...

    php后台程序与Javascript的两种交互方式

    action.php将信息放入cookie中,main.htm通过读取 cookie来实现交互。在main.htm中也可以通过重新读取action.php 来实现控制后台CGI程序。 index.htm 复制代码 代码如下: &lt;html&gt; &lt;head&gt; &lt;title&gt;...

    hipchat-php:用于与 HipChat REST API 交互的 PHP 库

    用于与 REST API 交互的 PHP 库。 作曲家安装 HipChat-PHP 可以与 Composer ( ) 一起安装。 将以下内容添加到您的 composer.json 文件中。 Composer 将处理自动加载。 { " require " : { " hipchat/hipchat-php ...

    sparkcore:帮助与 sparkcore 交互的 PHP 类。 例如消费服务器端事件

    帮助与 sparkcore 交互的 PHP 类。 例如使用服务器端事件。 执行 首先创建您自己的Sparkhose类,它扩展了SparkCore\Stream\Sparkhose 。 该库作为抽象类 (Sparkhose) 实现,该类被扩展以利用 SparkCore 事件流。 ...

    PHP与&#106avascript的两种交互方式

    在网页制作过程中怎样在不刷新页面的情况下使前台页面和 后台CGI页面保持交互...action.php将信息放入cookie中,main.htm通过读取 cookie来实现交互。在main.htm中也可以通过重新读取action.php 来实现控制后台CGI程

    sonos:一个与Sonos扬声器交互PHP库

    声纳一个用于与扬声器交互PHP库。 完整的文档可在 也可以从以下PHPDoc API文档:快速范例开始所有小组播放音乐$ sonos = new \duncan3dc\ Sonos \ Network ;$ controllers = $ sonos -&gt; getControllers ();foreach ...

    php数据库的增删改查 php与javascript之间的交互

    首先,在mysql中有一张用户信息表user,里面的字段分别是id,username与password,打开网页dbselect.php,首先就用php查出整张user表: 然后,插入数据的一栏,输入数据,就可把数据插入到mysql中的user表当中 在...

    Ganizor:第一个双重AS3 / PHP库-开源

    Ganizor是为客户端和服务器端构建的企业风格系统。 Ganizor将允许两端的开发人员进行独立的沟通和... 然后,Ganizor PHP进一步允许Flash和Server Side开发人员进行交互,因为现在可以通过AS3和PHP传递和控制信息了。

    json类 AS3.0可用

    actionscript3.0 可以用的json类,实现与php、asp、jsp等后台交互,轻量级...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    传统上网页的交互作用是通过CGI来实现的。CGI程序的伸缩性不很理想,因为它为每一个正在运行的CGI程序开一个独立进程。解决方法就是将经常用来编写CGI程序的语言的解释器编译进你的web服务器(比如mod_perl,JSP)。PHP...

    极酷阳光RTMP播放器V2试用版(功能强大)

    * 提供更丰富的JS函数接口,用于更方便的处理AS与JS的交互,以及JS与AS的交互; New * 支持视频模式切换(等比模式/拉申模式/原始尺寸/双倍大小)支持自定义初始视频模式; * 支持普通/高清模式切换; * 支持Flv,...

    flash+php刮奖

    flash+php刮奖实例,js,flash和php之间交互

    mod_php、FastCGI、PHP-FPM等PHP运行方式对比

    写这篇文章的是因为今天要Ubuntu下搭建LNMP环境,Nginx使用的是PHP-FPM,所以对Web服务器与PHP解释器的交互方式做了个整理。 众所周知,PHP是跨平台、跨服务器的语言,这也是它如此流行的原因之一。但是,很少有人...

    mysql-crud-oop-class-php:MySQL CRUD 类 PHP

    MySQL CRUD OOP 类 PHP (v.1.3) 这是一个简单易用的 MySQL 类,可以轻松地连接到任何现有的 PHP 应用程序,简化您的 MySQL 交互。设置数据库凭据您将需要更改类中的一些变量值,这些值代表您自己数据库的变量值。 ...

    酷播(极酷)跨平台多终端网页播放器 v4.0.zip

    12、提供更丰富的JS函数接口,用于更方便的处理AS与JS的交互,以及JS与AS的交互; 13、支持视频分享,支持微博分享(新浪微博/腾讯微博/百度收藏/人人网 分享),支持分享模式控制; 14、支持普通 / 高清视频...

    vimeo.php:Vimeo API的官方PHP库

    这是一个用于与交互的简单PHP库。 上载影片 从服务器上传视频 替换服务器中的视频 客户端上传 从网址上传视频 上传图片 框架整合 Vimeo API入门 在https://developer.vimeo.com/api/start上有很多有关Vimeo API的...

Global site tag (gtag.js) - Google Analytics