flash與後臺數據交換方法整理

 

  最近有一些網友總是詢問flash與後臺數據交互的問題,因此我就做了一些總結和整理,也想方便大家了!
  目前據我所知,Flash與後臺數據交互共有下列幾種方法(如果你覺得不全,你可告知一下,我會添加上去了):
    1.LoadVars(XML)
    2.Flash Remoting
    3.Webservice
    4.XMLSocket
 一.LoadVars篇
  我之所以把XML也放在這裏說,是因爲XML和LoadVars數據交互的方式大體相同,就是傳遞時的數據內容有點不一樣而已!
  我現在列出在開發過程最常用的"用戶密碼驗證"實例,加以說明!
// Flash代碼; 
//=======================================================;
//定義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這種形式就可以了; 
如有不清楚的地方,你可查看flash幫助文檔!
至於XML的方式,請對應地查看flash幫助文檔就可以了!
LoadVars方式的優點:
  1.flash代碼實現起來簡單,方便.
  2.服務端接收頁面和接收一個表單過來的數據一樣處理,不需要專門的技術,所有服務端程序都可以實現!

LoadVars方式的缺點:
1.傳遞的變量不宜過多.
  2.變量傳遞的值不能過長.
  3.變量傳遞值只能使用"字符串"這一種數據類型,數據類型單一.
  4.數據返回值當中不能有"&"字符,因此比較複雜的返回值都需進行URL編碼處理.
  Flash Remoting這種數據接口是四個之中效率最高的!
  其優點:
    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站查找)
 
//加載Remoting Component代碼,這個是必須的;
  #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");
  服務端方法定義(我這裏以Coldfusion Component爲例,其他版本請參考相應的資料)
<!---文件名爲myservice.cfc--->
<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> 
另附上Flash Remoting的在線幫助文件(Flash Remoting LiveDocs),MM網站上的Remoting相關的資料

0

收藏

wren_yp

33篇文章,9W+人氣,0粉絲

Ctrl+Enter 發佈

發佈

取消

掃一掃,領取大禮包

0

分享
wren_yp
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章