Flex与服务器交互之一(URLRequest +URLLoader应用) .

  由于Flex只是一种客户端技术其本身并不能直接同数据库交互,在实际的应用开发过程中Flex提供了如URLRequest、HTTPService、RemoteObject、WebService等类以实现同服务器的通讯和数据交互,下面做一些介绍和实例解析:
   1、使用URLRequest向服务器发送请求,使用URLLoader接收服务器返回的数据:
    URLRequest类可捕获单个 HTTP 请求中的所有信息,可以将 URLRequest 对象传递给 Loader、URLStream 和 URLLoader 类以及其他加载操作的 load() 方法以启动 URL 下载;默认情况下,传递给 url 参数的 URL 必须与执行调用的 SWF 文件在完全相同的域,包括子域。如果要从其它域中加载数据,请在承载数据的服务器上放置一个跨域策略文件。有关URLRequest详细可参看http://help.adobe.com/zh_CN/AIR/1.1/jslr/flash/net/URLRequest.html
   URLVariables类主要用来在应用程序和服务器之间传输参数变量;详细查看:http://livedocs.adobe.com/flex/3_cn/langref/flash/net/URLVariables.html
   URLLoader 类以文本、XML、二进制数据或 URL 编码变量的形式从 URL 返回请求的数据详细请参看:http://livedocs.adobe.com/flex/3_cn/langref/flash/net/URLLoader.html

    完成以下示例要引用到的Flex包:

  1. import mx.rpc.events.FaultEvent;  
  2. import mx.collections.XMLListCollection;  
  3. import flash.net.URLLoader;  
  4. import flash.net.URLRequest;  
  5. import flash.net.URLVariables;  
  6. import flash.net.URLRequestMethod;  
  7. import flash.events.Event;  
  8. import mx.utils.URLUtil;  
  9. import mx.collections.ArrayCollection;  
  10. import mx.rpc.events.ResultEvent;  
  11. import com.adobe.serialization.json.JSON;  

import mx.rpc.events.FaultEvent; import mx.collections.XMLListCollection; import flash.net.URLLoader; import flash.net.URLRequest; import flash.net.URLVariables; import flash.net.URLRequestMethod; import flash.events.Event; import mx.utils.URLUtil; import mx.collections.ArrayCollection; import mx.rpc.events.ResultEvent; import com.adobe.serialization.json.JSON;
   2、应用示例一:通过URLRequest和URLVariables向服务器发送参数请求并返回服务器文本数据(以下服务器端都采用asp.net编写)
   服务器端代码:

[c-sharp] view plain copy print ?
  1. protected void Page_Load(object sender, EventArgs e)  
  2. {  
  3.         //获取URLResuest请求回的参数 返回数据用;分隔以方便Flex对数据进行序列化   
  4.         string rs = String.Format("name={0};age={1};address={2}",Request.QueryString["name"],  
  5.                                                                  Request.QueryString["age"],  
  6.                                                                  Request.QueryString["address"]);  
  7.         Response.ClearContent();  
  8.         Response.ContentType = "text/plain";  
  9.         Response.Write(rs); //以文本形式返回数据   
  10.         Response.End();  
  11. }  

protected void Page_Load(object sender, EventArgs e) { //获取URLResuest请求回的参数 返回数据用;分隔以方便Flex对数据进行序列化 string rs = String.Format("name={0};age={1};address={2}",Request.QueryString["name"], Request.QueryString["age"], Request.QueryString["address"]); Response.ClearContent(); Response.ContentType = "text/plain"; Response.Write(rs); //以文本形式返回数据 Response.End(); }

   FLEX中发送请求:

[c-sharp] view plain copy print ?
  1. private function getText():void  
  2. {  
  3.     var v:URLVariables = new URLVariables("name=jacky&age=35&address=HongKong China");  
  4.     var r:URLRequest = new URLRequest();  
  5.     r.url = "http://localhost:2222/FlexService/TextFrm.aspx";  
  6.     r.method = URLRequestMethod.GET;  
  7.     r.data = v;  
  8.      
  9.     var l:URLLoader = new URLLoader();  
  10.     l.load(r);  
  11.     l.addEventListener(Event.COMPLETE,txtCompleteHandler); //注册请求完成后 响应获取数据事件方法   
  12.     labMsg.alpha = 1;  
  13. }  

private function getText():void { var v:URLVariables = new URLVariables("name=jacky&age=35&address=HongKong China"); var r:URLRequest = new URLRequest(); r.url = "http://localhost:2222/FlexService/TextFrm.aspx"; r.method = URLRequestMethod.GET; r.data = v; var l:URLLoader = new URLLoader(); l.load(r); l.addEventListener(Event.COMPLETE,txtCompleteHandler); //注册请求完成后 响应获取数据事件方法 labMsg.alpha = 1; }
   Flex中接收返回数据

[c-sharp] view plain copy print ?
  1.    private function txtCompleteHandler(e:Event):void  
  2. {  
  3.     var l:URLLoader = URLLoader(e.target);  
  4.     var o:Object = URLUtil.stringToObject(String(l.data)); //使用URLUtil对将数据进行反序列化以方便使用   
  5.     txtName.text = o.name;  
  6.     txtAge.text = o.age;  
  7.     txtAddress.text = o.address;  
  8.     labMsg.alpha = 0;  
  9. }  

private function txtCompleteHandler(e:Event):void { var l:URLLoader = URLLoader(e.target); var o:Object = URLUtil.stringToObject(String(l.data)); //使用URLUtil对将数据进行反序列化以方便使用 txtName.text = o.name; txtAge.text = o.age; txtAddress.text = o.address; labMsg.alpha = 0; }
   3、应用示例二:返回JSON格式数据:
   服务器端代码:
    

[c-sharp] view plain copy print ?
  1. public partial class JsonFrm : System.Web.UI.Page  
  2.     {  
  3.         Person person;  
  4.         protected void Page_Load(object sender, EventArgs e)  
  5.         {  
  6.             person = new Person();  
  7.             person.Name = "YAO MING";  
  8.             person.Age = 29;  
  9.             person.Address = "ShangHai China";  
  10.             HttpContext.Current.Response.ClearContent();  
  11.             HttpContext.Current.Response.ContentType = "text/plain";  
  12.             System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(person.GetType());  
  13.             dcjs.WriteObject(HttpContext.Current.Response.OutputStream,person);  
  14.             HttpContext.Current.Response.End();  
  15.         }  
  16.     }  
  17.     [System.Runtime.Serialization.DataContract]  
  18.     public class Person  
  19.     {  
  20.         [System.Runtime.Serialization.DataMember]  
  21.         public String Name{get;set;}  
  22.         [System.Runtime.Serialization.DataMember]  
  23.         public int Age { getset; }  
  24.         [System.Runtime.Serialization.DataMember]  
  25.         public String Address { getset; }  
  26.     }  

public partial class JsonFrm : System.Web.UI.Page { Person person; protected void Page_Load(object sender, EventArgs e) { person = new Person(); person.Name = "YAO MING"; person.Age = 29; person.Address = "ShangHai China"; HttpContext.Current.Response.ClearContent(); HttpContext.Current.Response.ContentType = "text/plain"; System.Runtime.Serialization.Json.DataContractJsonSerializer dcjs = new System.Runtime.Serialization.Json.DataContractJsonSerializer(person.GetType()); dcjs.WriteObject(HttpContext.Current.Response.OutputStream,person); HttpContext.Current.Response.End(); } } [System.Runtime.Serialization.DataContract] public class Person { [System.Runtime.Serialization.DataMember] public String Name{get;set;} [System.Runtime.Serialization.DataMember] public int Age { get; set; } [System.Runtime.Serialization.DataMember] public String Address { get; set; } }

   FLEX中发送请求:
   

[c-sharp] view plain copy print ?
  1. private function getJson():void  
  2.     {  
  3.         var v:URLVariables = new URLVariables();  
  4.         var r:URLRequest = new URLRequest();  
  5.         r.url = "http://localhost:2222/FlexService/JsonFrm.aspx";  
  6.         r.method = URLRequestMethod.GET;  
  7.         r.data = v;  
  8.          
  9.         var l:URLLoader = new URLLoader();  
  10.         l.load(r);  
  11.         l.addEventListener(Event.COMPLETE,jsonCompleteHandler);  
  12.         labMsg.alpha = 1;  
  13.     }  

private function getJson():void { var v:URLVariables = new URLVariables(); var r:URLRequest = new URLRequest(); r.url = "http://localhost:2222/FlexService/JsonFrm.aspx"; r.method = URLRequestMethod.GET; r.data = v; var l:URLLoader = new URLLoader(); l.load(r); l.addEventListener(Event.COMPLETE,jsonCompleteHandler); labMsg.alpha = 1; }
   Flex中接收返回数据
  

[c-sharp] view plain copy print ?
  1. public function jsonCompleteHandler(e:Event):void  
  2.   {  
  3.       var l:URLLoader = e.target as URLLoader;  
  4.       var o:* = JSON.decode(l.data);  
  5.        
  6.       txtName.text = o.Name;  
  7.       txtAge.text = o.Age;  
  8.       txtAddress.text = o.Address;  
  9.       labMsg.alpha = 0;  
  10.   }  

public function jsonCompleteHandler(e:Event):void { var l:URLLoader = e.target as URLLoader; var o:* = JSON.decode(l.data); txtName.text = o.Name; txtAge.text = o.Age; txtAddress.text = o.Address; labMsg.alpha = 0; }
  4、应用示例三:返回XML格式数据:
  服务器端代码:

[c-sharp] view plain copy print ?
  1. protected void Page_Load(object sender, EventArgs e)  
  2.   {  
  3.       String s = @"<?xml version=""1.0"" encoding=""utf-8""?>  
  4.                       <EV_ChartData_Scatter xmlns=""http://www.byd.com/ChartData/XML"">   
  5.                         <ScatterItem id=""0"">  
  6.                           <CAN_ITEM_ID>561</CAN_ITEM_ID>  
  7.                           <CAN_ITEM_NAME>主控ECU通讯状况</CAN_ITEM_NAME>  
  8.                           <ITEM_VALUE>0</ITEM_VALUE>  
  9.                           <MATCH_VALUE>正常</MATCH_VALUE>  
  10.                          </ScatterItem>  
  11.                         <ScatterItem  id=""1"">  
  12.                           <CAN_ITEM_ID>561</CAN_ITEM_ID>  
  13.                           <CAN_ITEM_NAME>主控ECU通讯状况</CAN_ITEM_NAME>  
  14.                           <ITEM_VALUE>1</ITEM_VALUE>  
  15.                           <MATCH_VALUE>丢包</MATCH_VALUE>  
  16.                         </ScatterItem>  
  17.                       </EV_ChartData_Scatter>";  
  18.       Response.ClearContent();  
  19.       Response.ContentType = "text/xml";  
  20.       Response.Write(s);  
  21.       Response.End();  
  22.   }  

protected void Page_Load(object sender, EventArgs e) { String s = @"<?xml version=""1.0"" encoding=""utf-8""?> <EV_ChartData_Scatter xmlns=""http://www.byd.com/ChartData/XML""> <ScatterItem id=""0""> <CAN_ITEM_ID>561</CAN_ITEM_ID> <CAN_ITEM_NAME>主控ECU通讯状况</CAN_ITEM_NAME> <ITEM_VALUE>0</ITEM_VALUE> <MATCH_VALUE>正常</MATCH_VALUE> </ScatterItem> <ScatterItem id=""1""> <CAN_ITEM_ID>561</CAN_ITEM_ID> <CAN_ITEM_NAME>主控ECU通讯状况</CAN_ITEM_NAME> <ITEM_VALUE>1</ITEM_VALUE> <MATCH_VALUE>丢包</MATCH_VALUE> </ScatterItem> </EV_ChartData_Scatter>"; Response.ClearContent(); Response.ContentType = "text/xml"; Response.Write(s); Response.End(); }

   FLEX中发送请求:
   

[c-sharp] view plain copy print ?
  1. private function getXML():void  
  2.     {  
  3.         var v:URLVariables = new URLVariables();  
  4.         var r:URLRequest = new URLRequest();  
  5.         r.url = "http://localhost:2222/FlexService/XMLFrm.aspx";  
  6.         r.method = URLRequestMethod.GET;  
  7.         r.data = v;  
  8.          
  9.         var l:URLLoader = new URLLoader();  
  10.         l.load(r);  
  11.         l.addEventListener(Event.COMPLETE,xmlCompleteHandler);  
  12.     }  

private function getXML():void { var v:URLVariables = new URLVariables(); var r:URLRequest = new URLRequest(); r.url = "http://localhost:2222/FlexService/XMLFrm.aspx"; r.method = URLRequestMethod.GET; r.data = v; var l:URLLoader = new URLLoader(); l.load(r); l.addEventListener(Event.COMPLETE,xmlCompleteHandler); }
   Flex中接收返回数据

[c-sharp] view plain copy print ?
  1. [Bindable]  
  2.         private var xml:XML;  
  3.         private function xmlCompleteHandler(e:Event):void  
  4.         {  
  5.             var l:URLLoader = e.target as URLLoader;  
  6.             xml= new XML(l.data);  
  7.             for each(var v in xml.ScatterItem)  
  8.             {  
  9.                  
  10.             }  
  11.             labMsg.alpha = 0;  
  12.         }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值