2.隨便一個可以架站的網站 讓http://localhost/amfphp/Amfphp/index.php 可以找的到即可
在windows下 我是使用appServer 比較簡單易懂
在macos下 我是使用MANP
3.介紹兩個方式
一個是使用flash NetConnect
一個是使用flex RemoteObject
A.php端
1.建置一個HelloWorld.php
內容如下
<?php
class HelloWorld
{
function sayHello()
{
return "Hello World!";
}
}
?>
2.放到資料夾C:\AppServ\www\amfphp\Amfphp\Services 下
3.測試網址http://localhost/amfphp/Amfphp 點選 if you are looking for service browser .....
有出現你放上去的class 還可以測試 就代表你成功了
一般會失敗的原因就是.php file沒有放在 Amfphp/Service下
B.Flash端
1.用flash cs 開啟一個fla吧
2.寫script
import flash.net.*;
var con:NetConnection = new NetConnection ;// 新增一個NetConnection物件
var re:Responder = new Responder(onResult,onFault); // 連上AMF gateway
con.connect("http://127.0.0.1/amfphp/Amfphp/index.php");
/*切記要加上 /index.php
因為他不像flex 只指定http://127.0.0.1/amfphp/Amfphp/ 就好了
不然會一直卡在Error #2044: Unhandled NetStatusEvent:. level=error,code=NetConnection.Call.BadVersion
at Untitled_fla::MainTimeline/frame1()
*/
function onResult(result:Object):void { //資料傳送成功時
var saveData:Object=result;
trace(saveData);
}
function onFault(fault:Object):void { //資料傳送失敗時
trace("failt");
}
con.call("HelloWorld.sayHello",re);
3.即可以看到php裡return Hello World ! (代表成功哩)
C.flex端
1.開啟flash builder new 一個project起來
2.在src 裡 設定services-config.xml
<?xml version="1.0" encoding="utf-8"?> <services-config> <services> <service id="amfphp-flashremoting-service" class="flex.messaging.service.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://127.0.0.1/amfphp/Amfphp/" class="flex.messaging.endpoints.AMFEndpoint" /></channel-definition> </channels> </services-config>一般都是 http://127.0.0.1/amfphp/Amfphp/ 修改一下 就好了
3.選取Project > Properties > Flex Compiler > Additional compiler arguments 下添加
如圖
4.mxml內容如下:
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"> <s:layout> <s:BasicLayout/> </s:layout> <fx:Script> <![CDATA[ import mx.managers.CursorManager; import mx.rpc.events.ResultEvent; import mx.rpc.events.FaultEvent; private function faultHandler(fault:FaultEvent):void { CursorManager.removeBusyCursor(); result_text.text="code:\n" + fault.fault.faultCode + "\n\nMessage:\n" + fault.fault.faultString + "\n\nDetail:\n" + fault.fault.faultDetail; } private function resultHandler(evt:ResultEvent):void { trace("success"); result_text.text+=evt.message.body.toString() + "\n"; // same as: evt.result.toString(); } ]]> </fx:Script> <fx:Declarations> <mx:RemoteObject id="myservice" fault="faultHandler(event)" showBusyCursor="true" source="HelloWorld" destination="amfphp"> <mx:method name="sayHello" result="resultHandler(event)"/> </mx:RemoteObject> </fx:Declarations> <mx:Button x="250" y="157" label="sayHello" width="79" click="myservice.getOperation('sayHello').send();"/> <mx:Button x="250" y="187" label="test fault" click="myservice.getOperation('foo').send(); "/> <mx:TextArea x="10" y="36" width="319" height="113" id="result_text"/> <mx:Label x="10" y="10" text="Result:"/> </s:Application>
5. run 起來 即可測試看看 是否有收到Hello World !
source code
//使用flash cs6
https://github.com/evonda/testAMFPHP
//使用flash builder 4.6 匯入
https://github.com/evonda/testFlexAmfphp
沒有留言:
張貼留言