之前简单介绍了利用PHPRPC发布服务,使用JAVA/JS客户端进行远程调用.那么作为RIA的箭头,任何服务当然也离不开与FLEX地交互.
接下来是FLEX客户端地调用,界面很简单,一个面板+一个按钮,按钮点击事件中开始调用服务器端服务,服务器端代码和之前的一样:
public class User { public function User() { } public var name:String; public var password:String; }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"> <mx:Panel x="102" y="24" width="590" height="301" layout="absolute"> <mx:Button x="112" y="194" label="获得" id="btn" click="test()"/> </mx:Panel> <mx:Script> <![CDATA[ import org.phprpc.PHPRPC_Client; import mx.controls.Alert; private static const URL:String = "http://localhost:8888/t/t.do?m=test"; //按扭事件 private function test():void{ var ps:PHPRPC_Client = new PHPRPC_Client(URL,["sayHello","sayGoodBye","showUser","getUser"]); ps.sayGoodBye();//调用sayGoodBye //调用sayHello ps.sayHello("fw",function(result:*){ Alert.show(result); }); //调用showUser 参数为一个FLEX对象 会自动转化 var user:User = new User(); user.name="fw"; user.password = "123"; ps.showUser(user); //调用getUser 自动将返回的服务器端User对象转为json对象 ps.getUser(function(result:*){ Alert.show(result.name); }); } ]]> </mx:Script> </mx:Application>
可以发现,几乎和JS调用的代码完全一样,只不过由JSON对象变成了FLEX对象,同样地,无需配置,只需要解压之前下载的针对AS3.0的版本的压缩文件,将里面的"PHPPRC_AS3.swc"添加进构建路径即可.
一点小小的遗憾是在PHPRPC_Client.as的源代码中对应服务URL和函数名数组的属性都是private的,因此除非修改PHPRPC_Client的源代码加上setter和getter对应的属性,否则将无法以MXML标签的形式使用PHPRPC_Client.不过话说回来通过AS来使用PHPRPC_Client本来就非常简单......