目前據我所知,Flash與後臺數據交互共有下列幾種方法(如果你覺得不全,你可告知一下,我會添加上去了):
1.LoadVars(XML)
2.Flash Remoting
3.Webservice
4.XMLSocket
我之所以把XML也放在這裏說,是因爲XML和LoadVars數據交互的方式大體相同,就是傳遞時的數據內容有點不一樣而已!
我現在列出在開發過程最常用的"用戶密碼驗證"實例,加以說明!
//=======================================================;
//定義LoadVars對象;
var data_lv = new LoadVars();
//提交的用戶名變量和參數值;
data_lv.username = "kinglong";
//提交的密碼變量和參數值;
data_lv.password = "king";
//提交後返回結果;
data_lv.onLoad = function(success){
//success,數據提交是否成功;
//這個只是表示數據傳輸是否成功,並不是用戶驗證的結果;
if(success){
trace("數據提交成功!");
//result也是用戶驗證返回的實際結果!
if(this.result=="true"){
trace("yes");
}else{
trace("no");
}
}else{
trace("數據提交失敗!");
}
}
//數據提交方法調用;
//第一參數就是提交的頁面地址;
//第二參數就是返回結果對象(只要是LoadVars對象就可以了);
//第三參數就是提交方式(這個和html中form表單類似,分爲"post"和"get"兩種方式)
data_lv.sendAndLoad("http://www.klstudio.com/save.asp",data_lv,"post");
//=======================================================;
//後臺服務端頁面處理及返回內容;
//=======================================================;
//接收flash提交過來的變量和接收一個頁面提交過來的變量一致的;
Request("username") 就是flash端username變量傳過來的值"kinglong";
Request("password") 就是flash端password變量傳過來的值"kinglong";
....數據庫驗證.....
//如果用戶驗證通過
&result=true
//如果用戶驗證失敗
&result=false
//整個頁面返回內容就是上面那一行內容,&result對應用着flash端的result變量;
//如果是多個返回值的話,就是&result=xxx&result1=xxx這種形式就可以了;
至於XML的方式,請對應地查看flash幫助文檔就可以了!
LoadVars方式的優點:
1.flash代碼實現起來簡單,方便.
2.服務端接收頁面和接收一個表單過來的數據一樣處理,不需要專門的技術,所有服務端程序都可以實現!
LoadVars方式的缺點:
1.傳遞的變量不宜過多.
2.變量傳遞的值不能過長.
3.變量傳遞值只能使用"字符串"這一種數據類型,數據類型單一.
4.數據返回值當中不能有"&"字符,因此比較複雜的返回值都需進行URL編碼處理.
其優點:
1.支持數據類型比較多(Converting from application server data types to ActionScript);
2.傳遞數據量比較大;
3.運行效率是現有幾個當中最高的;
4.對各種後臺的支持也比較好;
5.其還有調試模塊(NetConnection Debugger)
其缺點:
1.需要flash端裝Flash Remoting MX Components(這個是免費提供的);
2.需要後臺服務端裝相應版本的Flash Remoting模塊纔可以使用,MM提供的模塊有j2ee和.net兩個版本是要收費的,好在網上還有兩個開源的(OpenAMF,AMFPHP);
3.好像Remoting對虛擬主機的支持不太好(可以去google搜索一下,有沒有解決方法).
Flash端代碼說明:(我這裏用as1.0版本爲例,其他版本到MM站查找)
#include "NetServices.as"
//加載Remoting 調試模塊代碼,這個是可選擇的,用NetConnection Debugger查看調試信息;
#include "NetDebug.as"
if (inited == null){
inited = true;
//設置默認網關;
NetServices.setDefaultGatewayUrl("http://localhost:8500/flashservices/gateway");
//建立網關連接;
gateway_conn = NetServices.createGatewayConnection();
//獲取一個服務;
myService = gateway_conn.getService("myservice", this);
}
//定義調用方法的函數;
function getString(name){
//調用Remoting的getString方法;
myService.getString(name);
}
//定義返回結果的函數;
function getString_Result(result){
//result就爲返回的結果;
trace(result);
}
//定義返回狀態的函數,此爲可選的;
function getString_Status(error){
trace("getString_Status");
trace(error.code);
trace(error.description);
trace(error.details);
}
//調用函數;
getString("kinglong");
<cfcomponent displayname="我的服務">
<!---定義了getString方法,需將access設爲remote,否則Flash remoting無法調用此方法--->
<cffunction name="getString" access="remote" returntype="string">
<cfargument name="name" type="string" required="true">
<cfset myResult = arguments.name & ",歡迎你!">
<cfreturn myResult>
</cffunction>
</cfcomponent>
0
收藏
推薦專欄更多
猜你喜歡
掃一掃,領取大禮包
Ctrl+Enter 發佈
發佈
取消