- 浏览: 64729 次
- 性别:
- 来自: 深圳
最新评论
-
txtxp:
太神奇了 谢谢
Flex AIR中嵌入html控件导致的null object reference错误解决 -
damoqiongqiu:
Flex绝对会成为一个大杯具
选择Flex的理由 -
jssay:
地址都打不开,何解?
免费flash抽奖程序 -
ls6576837:
学习了,谢谢
Flex AIR中嵌入html控件导致的null object reference错误解决 -
eillittwang:
不错。。谢啦。。挺详细的。
AIR Express Install Badge在线安装出错及解决方法
在前两篇文章中分别介绍了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 = "http://localhost:1146/Data/Book.xml";
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 }
该示例的运行结果见文章最后,下面是这个示例的完整代码:
完整示例代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 import mx.rpc.events.FaultEvent;
6 import mx.rpc.events.ResultEvent;
7 import mx.rpc.http.HTTPService;
8
9 internal function onClick():void
10 {
11 var service:HTTPService = new HTTPService();
12 service.url = "http://localhost:1146/Data/Book.xml";
13 service.useProxy = false;
14 service.resultFormat="e4x";
15 service.addEventListener(ResultEvent.RESULT,onResultHandler);
16 service.send();
17 }
18
19 internal function onResultHandler(evt:ResultEvent):void
20 {
21 var xml:XML = evt.result as XML;
22 trace(xml);
23 bookGrid.dataProvider = xml.Book;
24 }
25 ]]>
26 </mx:Script>
27
28 <mx:Panel x="49.5" y="94" width="419" height="267" layout="absolute" fontSize="12" title="使用HTTPService加载XML数据">
29 <mx:DataGrid x="10" y="10" width="377" id="bookGrid">
30 <mx:columns>
31 <mx:DataGridColumn headerText="编号" dataField="Id"/>
32 <mx:DataGridColumn headerText="书名" dataField="Name"/>
33 <mx:DataGridColumn headerText="作者" dataField="Author"/>
34 <mx:DataGridColumn headerText="价格" dataField="Price"/>
35 </mx:columns>
36 </mx:DataGrid>
37 <mx:ControlBar height="42">
38 <mx:Button label="加载数据" fontWeight="normal" click="onClick()"/>
39 </mx:ControlBar>
40 </mx:Panel>
41 </mx:Application>
42
OK,我们来看看使用HTTPService传递参数到服务端是怎么实现的。使用HTTPService传递参数可以通过两种方式实现,分别如下:
1、直接在请求URL后面跟上参数列表,如:http://localhost/web/Test.aspx?a=1&b=2。
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 = "http://localhost:1146/OperationHandler.ashx?a="+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 = "http://localhost:1146/OperationHandler.ashx";
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()方法相互切换来测试两种不同的参数传递方式。
完整的示例代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 import mx.rpc.events.FaultEvent;
6 import mx.rpc.events.ResultEvent;
7 import mx.rpc.http.HTTPService;
8
9 /**
10 * 通过RUL参数直接传递
11 * */
12 internal function onClick():void
13 {
14 var service:HTTPService = new HTTPService();
15 var a:String = txtA.text;
16 var b:String = txtB.text;
17 service.url = "http://localhost:1146/OperationHandler.ashx?a="+a+"&b="+b;
18 service.useProxy = false;
19 service.resultFormat="e4x";
20 service.addEventListener(ResultEvent.RESULT,onResultHandler);
21 service.send();
22 }
23
24 /**
25 * 通过URLVariables进行参数传递
26 * */
27 // internal function onClick():void
28 // {
29 // var service:HTTPService = new HTTPService();
30 // service.url = "http://localhost:1146/OperationHandler.ashx";
31 // service.useProxy = false;
32 // service.resultFormat="e4x";
33 // service.addEventListener(ResultEvent.RESULT,onResultHandler);
34 // var param:URLVariables = new URLVariables();
35 // param.a = txtA.text;
36 // param.b = txtB.text;
37 // service.send();
38 // }
39
40 internal function onResultHandler(evt:ResultEvent):void
41 {
42 ab.text = evt.result.toString();
43 }
44 ]]>
45 </mx:Script>
46
47 <mx:Panel x="49.5" y="94" width="419" height="126" layout="absolute" fontSize="12" title="使用HTTPService传递参数">
48 <mx:TextInput x="33" y="10" width="91" id="txtA"/>
49 <mx:Label x="10" y="12" text="A:"/>
50 <mx:Label x="132" y="12" text="B:"/>
51 <mx:TextInput x="165" y="10" id="txtB" width="79"/>
52 <mx:Label x="252" y="12" text="A+B:"/>
53 <mx:TextInput x="293" y="10" width="95" id="ab"/>
54 <mx:ControlBar height="44">
55 <mx:Button label="计 算" fontWeight="normal" click="onClick()"/>
56 </mx:ControlBar>
57 </mx:Panel>
58 </mx:Application>
59
OperationHandler.ashx
1 public class OperationHandler : IHttpHandler
2 {
3
4 public void ProcessRequest(HttpContext context)
5 {
6 context.Response.ContentType = "text/plain";
7
8 int a = int.Parse(context.Request.QueryString["a"]);
9 int b = int.Parse(context.Request.QueryString["b"]);
10
11 context.Response.Write((a + b).ToString());
12 }
13
14 public bool IsReusable
15 {
16 get
17 {
18 return false;
19 }
20 }
21 }
上面示例的运行界面截图:
二、了解URLReqeust
使用URLRequest 类可捕获单个 HTTP 请求中的所有信息。将URLRequest 对象传递给URLStream或URLLoader 类以及其他加载操作的load()方法以启动URL数据加载。它的使用很简单,通过构造方法构造对象就OK:
1 var request:URLRequest = new URLRequest("http://localhost:1146/Data/Book.xml")
同样可以使用URLRequest来请求一个本地项目/应用里的文件,如下代码示例:
1 var request:URLRequest = new URLRequest("Data/Book.xml")
如上便构造好了URLRequest对象,只要将他传递给相应的对象load()方法便可实现数据加载。从某种角度可以将URLRequest理解为建立请求的工具。要是URLRequest类对象变成可用的对象还需得通过其他类来与之配合协作,详细见后面使用URLLoader加载数据。
URLRequest虽然功能强大,使用简单。但我们还是需要了解更多的东西,以便可以正确的应用URLRequest类和处理相应的错误。其中最引人关注的就是安全沙箱的问题,这部分我将在以后的文章中介绍,这里只需要记住两点就OK。
1、如果执行调用的 SWF 文件在只能与本地文件系统内容交互的沙箱中,而目标资源来自网络沙箱,则不允许进行数据加载。
2、如果执行调用的 SWF 文件来自网络沙箱而目标资源在本地,也不允许进行数据加载。
这里就简单介绍这些,关于URLRequest的详细资料大家可以查看官方提供的在线文档:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLRequest.html
三、使用URLLoader加载数据
URLLoader 类可以以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。下面将结合使用本地服务器上的数据(详细见文章前面的xml文件定义)的加载示例来演示URLLoader的使用方法。
那我们怎么通过URLLoader来加载它呢?很简单,使用上面介绍的URLRequest来创建请求连接,然后将URLRequest对象传递给URLLoader的load方法来实现数据加载。
1 internal function onClick():void
2 {
3 var request:URLRequest = new URLRequest("http://localhost:1146/Data/Book.xml");
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的代码定义:
mxml完整代码
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
3 <mx:Script>
4 <![CDATA[
5 internal function onClick():void
6 {
7 var request:URLRequest = new URLRequest("http://localhost:1146/Data/Book.xml");
8 var loader:URLLoader = new URLLoader();
9 loader.load(request);
10 loader.addEventListener(Event.COMPLETE,onCompleteHandler);
11 }
12
13 private function onCompleteHandler(evt:Event):void
14 {
15 var xml:XML = new XML(evt.target.data);
16 bookGrid.dataProvider = xml.Book;
17 }
18 ]]>
19 </mx:Script>
20 <mx:Panel x="49.5" y="94" width="419" height="267" layout="absolute" fontSize="12" borderColor="#E2E2E2" themeColor="#009DDF" title="使用URLLoader加在XML数据">
21 <mx:DataGrid x="10" y="10" width="377" id="bookGrid">
22 <mx:columns>
23 <mx:DataGridColumn headerText="编号" dataField="Id"/>
24 <mx:DataGridColumn headerText="书名" dataField="Name"/>
25 <mx:DataGridColumn headerText="作者" dataField="Author"/>
26 <mx:DataGridColumn headerText="价格" dataField="Price"/>
27 </mx:columns>
28 </mx:DataGrid>
29 <mx:ControlBar height="42">
30 <mx:Button label="加载数据" fontWeight="normal" click="onClick()"/>
31 </mx:ControlBar>
32 </mx:Panel>
33 </mx:Application>
34
本示例的运行结果如下图:
关于URLLoader的更多资料大家可以查看Adobe提供的在线文档:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLLoader.html
文章来自学IT网:http://www.xueit.com/html/2009-02/21_574_00.html
发表评论
-
[转]Flex与ASP.NET互操作系列5:使用FileReference+HttpHandler实现文件上传/下载
2010-01-07 11:58 1488在Flex的应用开发中,同ASP.NET,JSP,PHP等应用 ... -
[转]Flex与ASP.NET互操作系列3:基于WebService的数据访问(下)
2010-01-07 11:31 1121在上一篇文章《Flex与.NET互操作(二):基于WebSer ... -
[转]Flex与ASP.NET互操作系列2:基于WebService的数据访问(上)
2010-01-07 11:05 1191Flex提供了<mx:WebService>、&l ... -
[转]Flex与ASP.NET互操作系列1:基于Socket的网络连接
2010-01-07 10:37 1285Flash/Flex也支持基于Socket ... -
Flex对图片的处理例子
2009-10-31 21:11 1455对我有一定的参考价值 ... -
FLEX翻页效果控件
2009-10-31 19:51 3910在网上看到两个不错的FLEX实现翻页效果 http:/ ... -
Flex AIR中嵌入html控件导致的null object reference错误解决
2009-02-23 12:36 4881最近做一个功能,需要在flex的AIR项目中嵌入fckedit ... -
URLLoader在firefox下有问题,不能获取外部数据
2009-02-13 13:04 1429今天在改一个flex程 ... -
一个挺酷的flash图片展示效果
2009-01-09 14:08 11238为了做一个视频列表,在网上找了一个挺酷的flash图片展示效果 ... -
AIR Express Install Badge在线安装出错及解决方法
2009-01-04 17:27 5820AIR Express Install Badge是ADO ... -
免费flash抽奖程序
2009-01-03 20:30 7288演示地址:http://www.ilinker.net.c ... -
Flex move效果不能将application命名为move.mxml
2008-12-27 14:41 1201今天要做一个图片显示效果,图片在显示的时候是快速的弹出并急停弹 ... -
tourdeflex
2008-12-24 22:19 1344该应用列举了200多个Flex实例,内容丰富,而且还提供一 ... -
Flex中如何改变图片或控件的显示层次关系
2008-12-24 15:01 5822在某种情况下我们会需要实现如下应用情景:有两个图片或者是控 ... -
<learnging Felx3>翻译:第一章 概况——第一小节 什么是Flex
2008-11-30 13:02 1105Learning Flex3 译文-------------- ... -
关于翻译<learning Flex3>这本书的想法、书的简单介绍以及下载地址
2008-11-30 12:53 1317《Learning Flex 3: Getting up to ... -
iLinker的Flex简单入门教程—Flex中类与类文件的关系
2008-11-29 21:14 1171接着上次有关Flex中类重命名操作的讨论,我们接下来看一下F ... -
iLinker的Flex简单入门教程—Flex中类的重命名操作
2008-11-28 14:33 1002Flex的ActionScript可以按 ... -
选择Flex的理由
2008-11-22 11:01 31981 Flex与Flash 也许 ...
相关推荐
在Flex中创建的用户界面可以调用.NET编写的Web服务或直接与.NET应用进行交互,实现数据的加载和传输。这种互操作性为开发者提供了更大的灵活性,能够利用Flex的富客户端功能和.NET的强大后端服务。 在Flex中,有...
Flex与.NET互操作是跨平台应用开发中的一个重要环节,它允许使用Adobe Flex的用户界面技术与微软.NET框架下的服务端逻辑进行数据交换。在这种场景下,WebService作为一种标准的跨平台通信方式,使得Flex客户端能够...
Flex与.NET互操作是开发跨平台富互联网应用(RIA)时的一个重要技术组合,它允许基于Adobe Flex的前端用户界面与Microsoft.NET后端服务进行高效的数据交换和功能调用。Flex以其强大的图形用户界面和丰富的媒体支持,...
通过以上步骤,Flex4能够与Asp.net的WebService进行无缝交互,实现跨平台的数据交换和业务逻辑处理。这种模式在开发复杂的Web应用时非常常见,特别是在需要富客户端体验和强大后端功能的场景下。 总结,Flex4与Asp...
此外,还会讲解如何创建第一个Flex与ASP.NET交互的简单项目,介绍基本的HTTPService或WebService调用,用于在客户端和服务器之间传递数据。 第14章可能专注于“数据绑定与服务通信”。在这个章节,作者可能会详细...
本教程为 Flex+ASP.NET+Access 的留言簿... 提交篇-讲述使用Flex通过ASP.NET向Access数据库写入数据,分为HTTPService版和URLLoader版。 显示篇-讲述使用ASP.NET读取Access数据库并生成xml文件,再通过Flex显示出来。
Flex 和 ASP.NET 的结合应用是将 Adobe Flex 的前端交互能力与 Microsoft ASP.NET 的后端处理能力相结合,构建富互联网应用程序(RIA)。在这个范例中,我们看到一个基本的登录功能的实现,它演示了Flex客户端如何与...
Flex和ASP.NET之间的通信是通过Web服务(WebService)实现的,这种技术允许不同平台和语言的应用程序之间交换数据。在本示例中,我们将探讨如何使用Flex作为客户端,与使用ASP.NET构建的Web服务进行交互,以实现一个...
本文将深入探讨如何将Flex与ASP.NET结合起来,实现文件上传功能,并通过HTTPService和XML进行数据通信。 首先,我们需要理解Flex中的HTTPService组件。HTTPService是Flex提供的一种用于与Web服务器进行HTTP通信的...
Flex ASP.NET 流量统计是一种将Adobe Flex技术与Microsoft ASP.NET框架相结合,用于监测和分析网站流量的方法。这种集成能够提供交互式的用户界面和强大的后端数据处理能力,为网站管理员提供实时或近实时的流量数据...
本文将深入探讨Flex与后台交互的三种主要方法:HTTPService、WebService和URLLoader,并重点关注基于WebService的交互方式。 一、HTTPService HTTPService是Flex中用于与HTTP服务器进行数据交换的主要组件。它基于...
Flex(Flash)与.NET交互教程主要讲解了如何在Flex(基于Flash技术的RIA开发工具)和.NET框架之间建立通信,实现客户端与服务器端的数据交换。本文将深入介绍这个过程,包括必要的软件安装、项目的创建以及代码实现...
.net 下用asp.net实现的HttpService例子; HttpService的部署方式跟网站的部署方式一样; 运行HttpClient前注意先配置下配置文件,Url为HttpService的地址
Flex4是一种基于ActionScript 3.0的开源框架...通过查看和运行这个示例,你将更深入地理解如何在Flex4中使用`HTTPService`与服务器交换数据。记住,理解XML数据的结构和如何适当地解析它,是使用`HTTPService`的关键。
本教程旨在演示在帶有ASP.NET的Flex 2+中HTTPService功能的使用。 Adobe Flex中有許多方法可以與ASP.NET(或簡單地說,服務器端語言)進行通信。 HttpService,WebService,WebORB,FluorineFx等。在本教程中,我僅...
对于SQL Server,你可以使用ADO.NET库来连接和操作数据库。ADO.NET提供了一组丰富的类,如SqlConnection、SqlCommand、SqlDataReader等,使得与SQL Server的交互变得简单。在Web服务的方法中,你可以使用这些类来...
Flex加载xml数据三种方式:HTTPService XMLLoader XML类