今天有个朋友问我怎么用Remoting来和flex进行数据传输,他懂得用XML传输,用文本字符串传输,但是我就是搞不懂他为什么认为Remoting应用是复杂的呢?!呵呵,是我们把它给神秘化了,其实它的应用是很简单的,我来简单的说一下!
FLEX Remoting可应用的服务器运行语言有多种选择,PHP ASP.NET JSP都可以,由于我们要应用到AMF,而AMFPHP是一个不错的选择,它是完全免费的,而其不用安装,完全由PHP进行编写,只要电脑能运行PHP就可以执行AMFPHP,所以这里我们选择AMFPHP。
首先我们先去下载一个AMFPHP,地址:http://amfphp.sourceforge.net/ 它是一个压缩文件,下载完毕后把这个压缩包里的文件解压到自己服务器的WEB目录即可,比如C:/webroot/amfphp,这样我们就可以访问到http://localhost/amfphp。
好,下面我们写一个简单的PHP用来读取数据库中数据 getDB.php 注意,此文件必须存放在amfphp目录下的services文件夹里,此文件夹是默认用来存放PHP Remoting程序的:
<?php
class getDB{
//这个函数将被Flex远程调用
function getData() {
mysql_connect("localhost", "root","password");
mysql_select_db("test");
mysql_query("SET NAMES UTF8");
//查询所有数据并返回
$sql="select * from test";
return mysql_query($sql);
}
}
?>
这段程序的意思是从数据库test表里读出的所有数据返回,我们还需要一个配置文件services_config.xml,用来提供FLEX远程识别服务器信息,其中里面配置了一些AMFPHP的入口文件路径信息:
<?xml version="1.0" encoding="UTF-8"?>
<services-config>
<services>
<service id="amfphp-flashremoting-service" class="flex.messaging.services.RemotingService" messageTypes="flex.messaging.messages.RemotingMessage">
<destination id="amfphp">
<channels>
<channel ref="my-amfphp"/>
</channels>
<properties>
<source>*</source>
</properties>
</destination>
</service>
</services>
<channels>
<channel-definition id="my-amfphp" class="mx.messaging.channels.AMFChannel">
<endpoint uri="http://localhost/amfphp/gateway.php" class="flex.messaging.endpoints.AMFEndpoint"/>
</channel-definition>
</channels>
</services-config>
要注意的是里面的http://localhost/amfphp/gateway.php这个路径,如果你设置的和本路径不同,一定记得修改。把services_config.xml文件放置在你的站点的根目录。好,下一步我们就可以编写FLEX客户端程序了,FLEX是用RemoteObject对象来接收从服务器出来的对象的:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="initApp()">
<mx:Script>
<![CDATA[
import mx.rpc.http.HTTPService;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import flash.events.Event;
internal function initApp():void{
//获得远程getData方法,并请求该方法
service.getOperation('getData').send();
}
internal function resultHandler(evt:ResultEvent):void{
//这个方法处理的是当加载成功后获得远程getData
//返回的数据,通过evt.result这个访问
//如myGrid.dataProvider=evt.result;
}
internal function faultHandler(evt:FaultEvent):void{
//处理加载错误
trace("fault:"+evt.fault);
}
]]>
</mx:Script>
<mx:RemoteObject id="service" fault="faultHandler(event)" source="getDB" destination="amfphp">
//创建方法,与远程方法同名
<mx:method name="getData" result="resultHandler(event)" />
</mx:RemoteObject>
</mx:Application>
好了,到目前为止思路我已经讲完了,没有过多的讲程序的细节(我比较懒),但是相信代码已经贴出应该能看懂的。
admin#flashas.net (#为@) 联系QQ:
:40777822