flash与后台数据交换方法整理1-LoadVars篇

最近有一些网友总是询问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编码处理.

as2的代码呢 as3现在还可以使用Socket+AMF3来做 因为是二进制的 所以效率比xmlsocket还高一些 而且不用去繁琐的解析XML

AMF(Act ion Message Format 动作信息格式)是用来序列化AS(ActionScr ipt 动作脚本)实例对象

(object graphs) 的压缩的二进制格式。序列化的AMF编码的实例对象可用来持久化,并且在不同

的会话中获得应用的公共状态,或者允许在两个端点(比如客户端和服务器端)通过强

类型数据交换进行通信。

这2天刚好做了个这个的试验,大概的流程是这个样子的。

1、客户端(AS3)用Socket连接服务端(JAVA),代码未考虑IO异常等因素,代码见下:

  1. var socket:Socket=new Socket();

  2. socket.addEventListener(Event.CONNECT, connectHandler);

  3. socket.connect("localhost",1028);

  4. function connectHandler(event:Event):void {

  5.         trace("连接成功");    

  6.                 //直接构建一个对象          

  7.                 var oo = new Object();

  8.         oo.name= "name";

  9.         oo.id= "id";

  10.         oo.classname="com.starCom.test.TestBean";

  11.                 //直接将对象写入

  12.         socket.writeObject(oo);

  13. }

复制代码2、服务端负责启动serverSocket监听端口,并用AMF3读取传递过来对象,利用反射机制重组对象。主要代码如下:

  1. SerializationContext serializationContext = new SerializationContext();

  2. // 序列化amf3对象

  3. Amf3Input amfInput = new Amf3Input(serializationContext);

  4. ServerSocket serverSocekt = new ServerSocket(1028);// 开启服务器进程

  5. while (true) {

  6.         try {

  7.                       Socekt    socket = serverSocekt.accept();

  8.                       amfInput.setInputStream(socket.getInputStream());

  9.                       //这样就得到了客户端传递过来的对象,封装成了flex.messaging.io.amf.ASObject

  10.               ASObject obj = (ASObject) amfInput.readObject();

  11.                       //得到传递过来的值

  12.                       System.out.println("obj.id >>>>>>>>>>>> "  + obj .get("id"));

  13.                       System.out.println("obj.name >>>>>>>>>>>> "  + obj .get("name"));

  14.                       //根据传递过来的类名,执行反射

  15.                       Class objClass = Class.forName((String) obj.get("classname"));

  16.               Object objt = objClass.newInstance();

  17.         } catch (FileNotFoundException e) {

  18.                           e.printStackTrace();

  19.         } catch (IOException e) {

  20.                 e.printStackTrace();

  21.         }

  22. }

你可能感兴趣的:(Flash)