Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据

简介:
在前两篇文章中分别介绍了Flex与.NET的WebService之间的数据交互通信知识,本文将介绍另外一种加载数据以及发起请求的方式。ActionScript 3.0中提供的数据加载请求类主要是HTTPService,URLLoader和URLRequest,可以通过他们协同来完成数据加载和请求。下面我么便来看看这三个类是怎么来完成数据加载工作。
     在本地IIS服务器上有如下定义的XML文件:
 1  <? xml version="1.0" encoding="utf-8"  ?>
 2  < Root >
 3     < Book >
 4       < Id > 1 </ Id >
 5       < Name > 《三国演义》 </ Name >
 6       < Author > 罗贯中 </ Author >
 7       < Price > 52.30 </ Price >
 8     </ Book >
 9     < Book >
10       < Id > 2 </ Id >
11       < Name > 《西游记》 </ Name >
12       < Author > 吴承恩 </ Author >
13       < Price > 39.91 </ Price >
14     </ Book >
15     < Book >
16       < Id > 3 </ Id >
17       < Name > 《红楼梦》 </ Name >
18       < Author > 曹雪芹 </ Author >
19       < Price > 48.20 </ Price >
20     </ Book >
21     < Book >
22       < Id > 4 </ Id >
23       < Name > 《水浒传》 </ Name >
24       < Author > 施耐庵 </ Author >
25       < Price > 39.85 </ Price >
26     </ Book >
27  </ Root >


一、使用HTTPService传递和加载数据
     使用HTTPService可以实现加载数据,也可以实现参数传递,下面通过两个示例程序来讲解这两个知识点。
     首先来看看HTTPService加载数据的方式。在Flex中使用HTTPService来装载外部数据是非常简单的,他是基于HTTP协议发送POST和GET请求外部数据,然后通过指定的监听方法来处理响应。我们可以通过<mx:HTTPService>标签来完成对数据源的连接,也可以通过可编程方式来处理,两种方式没什么大的差距,实际开发中可以根据自己喜好选择。
 1  internal  function onClick(): void
 2  {
 3      var service:HTTPService  =   new  HTTPService();
 4      service.url  =   " [url]http://localhost:1146/Data/Book.xml[/url] " ;
 5      service.useProxy  =   false ;
 6      service.resultFormat = " e4x " ;
 7      service.addEventListener(ResultEvent.RESULT,onResultHandler);
 8      service.send();
 9  }
10 
11  internal  function onResultHandler(evt:ResultEvent): void
12  {
13      var xml:XML  =  evt.result  as  XML;
14      trace(xml);
15      bookGrid.dataProvider  =  xml.Book;
16  }
 
     该示例的运行结果见文章最后,下面是这个示例的完整代码:
ContractedBlock.gif 完整示例代码
 
     OK,我们来看看使用HTTPService传递参数到服务端是怎么实现的。使用HTTPService传递参数可以通过两种方式实现,分别如下:
     1、直接在请求URL后面跟上参数列表,如: [url]http://localhost/web/Test.aspx?a=1&b=2[/url]
     2、通过Flex SDK为我们提供专门用语参数传递的对象( URLVariables)来实现。
     下面以一道简单的加法运算来演示HTTPService传递参数的使用,在Flex里将需要进行加法运算的两个数传递到.NET服务端并计算其和后返回给Flex客户端,两种方式传递没有太大的区别,详细请看如下代码演示:
 1  /* *
 2   * 通过RUL参数直接传递
 3   *  */
 4  internal  function onClick(): void
 5  {
 6      var service:HTTPService  =   new  HTTPService();
 7      var a:String  =  txtA.text;
 8      var b:String  =  txtB.text;
 9      service.url  =   " [url]http://localhost:1146/OperationHandler.ashx?a=[/url] " + a + " &b= " + b;
10      service.useProxy  =   false ;
11      service.resultFormat = " e4x " ;
12      service.addEventListener(ResultEvent.RESULT,onResultHandler);
13      service.send();
14  }
15 
16  /* *
17   * 通过URLVariables进行参数传递
18   *  */
19  internal  function onClick(): void
20  {
21      var service:HTTPService  =   new  HTTPService();
22      service.url  =   " [url]http://localhost:1146/OperationHandler.ashx[/url] " ;
23      service.useProxy  =   false ;
24      service.resultFormat = " e4x " ;
25      service.addEventListener(ResultEvent.RESULT,onResultHandler);
26      var param:URLVariables  =   new  URLVariables();
27      param.a  =  txtA.text;
28      param.b  =  txtB.text;
29      service.send();
30  }
 
      下面是完整的示例代码,可以把onClick()方法相互切换来测试两种不同的参数传递方式。
ContractedBlock.gif 完整的示例代码
 
ContractedBlock.gif OperationHandler.ashx
 
     上面示例的运行界面截图:
          

 
二、了解URLReqeust
     使用URLRequest 类可捕获单个 HTTP 请求中的所有信息。将URLRequest 对象传递给URLStream或URLLoader 类以及其他加载操作的 load()方法以启动URL数据加载。它的使用很简单,通过构造方法构造对象就OK:
1  var request:URLRequest  =   new  URLRequest( " [url]http://localhost:1146/Data/Book.xml[/url] " )
 
     同样可以使用URLRequest来请求一个本地项目/应用里的文件,如下代码示例:
1  var request:URLRequest  =   new  URLRequest( " Data/Book.xml " )

     如上便构造好了URLRequest对象,只要将他传递给相应的对象load()方法便可实现数据加载。从某种角度可以将URLRequest理解为建立请求的工具。要是URLRequest类对象变成可用的对象还需得通过其他类来与之配合协作,详细见后面使用URLLoader加载数据。
     URLRequest虽然功能强大,使用简单。但我们还是需要了解更多的东西,以便可以正确的应用URLRequest类和处理相应的错误。其中最引人关注的就是安全沙箱的问题,这部分我将在以后的文章中介绍,这里只需要记住两点就OK。  
     1、如果执行调用的 SWF 文件在只能与本地文件系统内容交互的沙箱中,而目标资源来自网络沙箱,则不允许进行数据加载。
     2、如果执行调用的 SWF 文件来自网络沙箱而目标资源在本地,也不允许进行数据加载。
     这里就简单介绍这些,关于URLRequest的详细资料大家可以查看官方提供的在线文档: [url]http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLRequest.html[/url]

 
三、使用URLLoader加载数据
     URLLoader 类可以以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。下面将结合使用本地服务器上的数据(详细见文章前面的xml文件定义)的加载示例来演示URLLoader的使用方法。 
      那我们怎么通过URLLoader来加载它呢?很简单,使用上面介绍的URLRequest来创建请求连接,然后将URLRequest对象传递给URLLoader的load方法来实现数据加载。
 1  internal  function onClick(): void
 2  {
 3      var request:URLRequest  =   new  URLRequest( " [url]http://localhost:1146/Data/Book.xml[/url] " );
 4      var loader:URLLoader  =   new  URLLoader();
 5      loader.load(request);
 6      loader.addEventListener(Event.COMPLETE,onCompleteHandler);
 7  }
 8 
 9  private  function onCompleteHandler(evt:Event): void
10  {
11      var xml:XML  =   new  XML(evt.target.data);
12      bookGrid.dataProvider  =  xml.Book;
13  }
     下面是整个mxml的代码定义:
ContractedBlock.gif mxml完整代码
 
     本示例的运行结果如下图:
        
 
关于URLLoader的更多资料大家可以查看Adobe提供的在线文档: [url]http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLLoader.html[/url]




本文转自 beniao 51CTO博客,原文链接:http://blog.51cto.com/beniao/133035,如需转载请自行联系原作者

目录
相关文章
|
2月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
1天前
|
开发框架 .NET 开发工具
LabVIEW加载.NET程序集
LabVIEW加载.NET程序集
|
2天前
|
XML 开发框架 .NET
LabVIEW中加载.NET 2.0,3.0和3.5程序集
LabVIEW中加载.NET 2.0,3.0和3.5程序集
11 4
|
24天前
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
2月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
12 0
|
3月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
72 0
|
5月前
|
Oracle 关系型数据库 数据管理
.NET医院检验系统LIS源码,使用了oracle数据库,保证数据的隔离和安全性
LIS系统实现了实验室人力资源管理、标本管理、日常事务管理、网络管理、检验数据管理(采集、传输、处理、输出、发布)、报表管理过程的自动化,使实验室的操作人员和管理者从繁杂的手工劳作中解放出来,提高了检验人员的工作效率和效益,降低了劳动成本和差错发生率。
|
7月前
|
前端开发 JavaScript
.net core 前端传递参数有值 后端接收到的数据却是null
1、问题分析 在做接口测试时,偶然出现了前端输出有值,但是后端断点调试时却出现接收参数总是为null的情况 2、解决办法 前端打印log,看前端的每一个传值的数据类型,与后端请求参数类进行认真的一一比对 小技巧: ① 直接打印调用接口的传参值的数据类型,例如 console.log(type of this.form.name) --string console.log(type of this.form.age) --number 打印的数据类型与后端接口的参数类比对,查出不对应的类型 ② 关于非必填的值,默认传值可能出现空字符串(' ')、NaN值(Not a Number
114 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
17天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0