在前两篇文章中分别介绍了Flex与.NET的WebService之间的数据交互通信知识,本文将介绍另外一种加载数据以及发起请求的方式。ActionScript 3.0中提供的数据加载请求类主要是HTTPService,URLLoader和URLRequest,可以通过他们协同来完成数据加载和请求。下面我么便来看看这三个类是怎么来完成数据加载工作。
在本地IIS服务器上有如下定义的XML文件:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1<?xmlversion="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>标签来完成对数据源的连接,也可以通过可编程方式来处理,两种方式没什么大的差距,实际开发中可以根据自己喜好选择。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1internalfunctiononClick():void
2{
3varservice:HTTPService=newHTTPService();
4service.url="http://localhost:1146/Data/Book.xml";
5service.useProxy=false;
6service.resultFormat="e4x";
7service.addEventListener(ResultEvent.RESULT,onResultHandler);
8service.send();
9}
10
11internalfunctiononResultHandler(evt:ResultEvent):void
12{
13varxml:XML=evt.resultasXML;
14trace(xml);
15bookGrid.dataProvider=xml.Book;
16}
该示例的运行结果见文章最后,下面是这个示例的完整代码:
完整示例代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1<?xmlversion="1.0"encoding="utf-8"?>
2<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute">
3<mx:Script>
4<![CDATA[
5importmx.rpc.events.FaultEvent;
6importmx.rpc.events.ResultEvent;
7importmx.rpc.http.HTTPService;
8
9internalfunctiononClick():void
10{
11varservice:HTTPService=newHTTPService();
12service.url="http://localhost:1146/Data/Book.xml";
13service.useProxy=false;
14service.resultFormat="e4x";
15service.addEventListener(ResultEvent.RESULT,onResultHandler);
16service.send();
17}
18
19internalfunctiononResultHandler(evt:ResultEvent):void
20{
21varxml:XML=evt.resultasXML;
22trace(xml);
23bookGrid.dataProvider=xml.Book;
24}
25]]>
26</mx:Script>
27
28<mx:Panelx="49.5"y="94"width="419"height="267"layout="absolute"fontSize="12"title="使用HTTPService加载XML数据">
29<mx:DataGridx="10"y="10"width="377"id="bookGrid">
30<mx:columns>
31<mx:DataGridColumnheaderText="编号"dataField="Id"/>
32<mx:DataGridColumnheaderText="书名"dataField="Name"/>
33<mx:DataGridColumnheaderText="作者"dataField="Author"/>
34<mx:DataGridColumnheaderText="价格"dataField="Price"/>
35</mx:columns>
36</mx:DataGrid>
37<mx:ControlBarheight="42">
38<mx:Buttonlabel="加载数据"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客户端,两种方式传递没有太大的区别,详细请看如下代码演示:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1/**
2*通过RUL参数直接传递
3**/
4internalfunctiononClick():void
5{
6varservice:HTTPService=newHTTPService();
7vara:String=txtA.text;
8varb:String=txtB.text;
9service.url="http://localhost:1146/OperationHandler.ashx?a="+a+"&b="+b;
10service.useProxy=false;
11service.resultFormat="e4x";
12service.addEventListener(ResultEvent.RESULT,onResultHandler);
13service.send();
14}
15
16/**
17*通过URLVariables进行参数传递
18**/
19internalfunctiononClick():void
20{
21varservice:HTTPService=newHTTPService();
22service.url="http://localhost:1146/OperationHandler.ashx";
23service.useProxy=false;
24service.resultFormat="e4x";
25service.addEventListener(ResultEvent.RESULT,onResultHandler);
26varparam:URLVariables=newURLVariables();
27param.a=txtA.text;
28param.b=txtB.text;
29service.send();
30}
下面是完整的示例代码,可以把onClick()方法相互切换来测试两种不同的参数传递方式。
完整的示例代码
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1<?xmlversion="1.0"encoding="utf-8"?>
2<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"layout="absolute">
3<mx:Script>
4<![CDATA[
5importmx.rpc.events.FaultEvent;
6importmx.rpc.events.ResultEvent;
7importmx.rpc.http.HTTPService;
8
9/**
10*通过RUL参数直接传递
11**/
12internalfunctiononClick():void
13{
14varservice:HTTPService=newHTTPService();
15vara:String=txtA.text;
16varb:String=txtB.text;
17service.url="http://localhost:1146/OperationHandler.ashx?a="+a+"&b="+b;
18service.useProxy=false;
19service.resultFormat="e4x";
20service.addEventListener(ResultEvent.RESULT,onResultHandler);
21service.send();
22}
23
24/**
25*通过URLVariables进行参数传递
26**/
27//internalfunctiononClick():void
28//{
29//varservice:HTTPService=newHTTPService();
30//service.url="http://localhost:1146/OperationHandler.ashx";
31//service.useProxy=false;
32//service.resultFormat="e4x";
33//service.addEventListener(ResultEvent.RESULT,onResultHandler);
34//varparam:URLVariables=newURLVariables();
35//param.a=txtA.text;
36//param.b=txtB.text;
37//service.send();
38//}
39
40internalfunctiononResultHandler(evt:ResultEvent):void
41{
42ab.text=evt.result.toString();
43}
44]]>
45</mx:Script>
46
47<mx:Panelx="49.5"y="94"width="419"height="126"layout="absolute"fontSize="12"title="使用HTTPService传递参数">
48<mx:TextInputx="33"y="10"width="91"id="txtA"/>
49<mx:Labelx="10"y="12"text="A:"/>
50<mx:Labelx="132"y="12"text="B:"/>
51<mx:TextInputx="165"y="10"id="txtB"width="79"/>
52<mx:Labelx="252"y="12"text="A+B:"/>
53<mx:TextInputx="293"y="10"width="95"id="ab"/>
54<mx:ControlBarheight="44">
55<mx:Buttonlabel="计算"fontWeight="normal"click="onClick()"/>
56</mx:ControlBar>
57</mx:Panel>
58</mx:Application>
59
OperationHandler.ashx
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1publicclassOperationHandler:IHttpHandler
2{
3
4publicvoidProcessRequest(HttpContextcontext)
5{
6context.Response.ContentType="text/plain";
7
8inta=int.Parse(context.Request.QueryString["a"]);
9intb=int.Parse(context.Request.QueryString["b"]);
10
11context.Response.Write((a+b).ToString());
12}
13
14publicboolIsReusable
15{
16get
17{
18returnfalse;
19}
20}
21}
上面示例的运行界面截图:
二、了解URLReqeust
使用URLRequest 类可捕获单个 HTTP 请求中的所有信息。将URLRequest 对象传递给URLStream或URLLoader 类以及其他加载操作的load()
方法以启动URL数据加载。它的使用很简单,通过构造方法构造对象就OK:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1varrequest:URLRequest=newURLRequest("http://localhost:1146/Data/Book.xml")
同样可以使用URLRequest来请求一个本地项目/应用里的文件,如下代码示例:
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1varrequest:URLRequest=newURLRequest("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方法来实现数据加载。
<!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />-->1internalfunctiononClick():void
2{
3varrequest:URLRequest=newURLRequest("http://localhost:1146/Data/Book.xml");
4varloader:URLLoader=newURLLoader();
5loader.load(request);
6loader.addEventListener(Event.COMPLETE,onCompleteHandler);
7}
8
9privatefunctiononCompleteHandler(evt:Event):void
10{
11varxml:XML=newXML(evt.target.data);
12bookGrid.dataProvider=xml.Book;
13}
下面是整个mxml的代码定义:
相关推荐
在Flex中创建的用户界面可以调用.NET编写的Web服务或直接与.NET应用进行交互,实现数据的加载和传输。这种互操作性为开发者提供了更大的灵活性,能够利用Flex的富客户端功能和.NET的强大后端服务。 在Flex中,有...
Flex与.NET互操作是跨平台应用开发中的一个重要环节,它允许使用Adobe Flex的用户界面技术与微软.NET框架下的服务端逻辑进行数据交换。在这种场景下,WebService作为一种标准的跨平台通信方式,使得Flex客户端能够...
Flex与.NET互操作是开发跨平台富互联网应用(RIA)时的一个重要技术组合,它允许基于Adobe Flex的前端用户界面与Microsoft.NET后端服务进行高效的数据交换和功能调用。Flex以其强大的图形用户界面和丰富的媒体支持,...
Flex加载xml数据三种方式:HTTPService XMLLoader XML类
本文将深入探讨Flex与后台交互的三种主要方法:HTTPService、WebService和URLLoader,并重点关注基于WebService的交互方式。 一、HTTPService HTTPService是Flex中用于与HTTP服务器进行数据交换的主要组件。它基于...
Flex和.NET通信是一种跨平台的交互方式,它允许基于Adobe Flex的前端应用与Microsoft .NET框架后端服务进行数据交换。这种通信模式通常利用Web服务技术,如SOAP(Simple Object Access Protocol)或REST...
在实践中,开发者通常会创建一个C# Web服务(如ASP.NET Web API或WCF服务),定义服务接口和操作,然后在Flex端使用HTTPService或WebService组件调用这些服务。通过设置适当的服务地址、方法名和参数,可以实现数据...
Flex(Flash)与.NET交互教程主要讲解了如何在Flex(基于Flash技术的RIA开发工具)和.NET框架之间建立通信,实现客户端与服务器端的数据交换。本文将深入介绍这个过程,包括必要的软件安装、项目的创建以及代码实现...
1. 数据交互:Flex客户端通过HTTPService或者WebService与ASP.NET服务器进行数据交换。HTTPService允许Flex应用发送HTTP请求并处理响应,而WebService则使得Flex可以直接调用ASP.NET Web服务方法。 2. 数据收集:在...
Flex与Java之间的通信是开发跨平台应用程序时的关键技术,它允许客户端(通常为Flex应用程序)与服务器端(通常是Java应用程序)进行数据交换。本篇将深入探讨几种主要的通信方式:URLLoader,HTTPService和Socket。...
Flex是Adobe公司开发的一种用于构建富互联网应用(RIA)的开放源代码框架,它主要使用ActionScript编程语言,与XML、AMF等数据格式进行交互。在本篇中,我们将探讨Flex与Java之间的低数据量通信,特别是通过...
本篇文章将深入探讨如何利用Flex 4.0中的HttpService和WebService组件与Java Struts2框架构建的服务器进行通信。 首先,我们来看HttpService。HttpService是ActionScript 3.0中的一个类,用于发起HTTP请求,通常...
本篇文章将详细探讨Flex中的HTTPService,以及如何通过HTTPService来实现数据的发送和接收。 HTTPService组件是Flex SDK中的一个类,它基于Flash Player的URLLoader类,允许开发者向HTTP服务器发送GET和POST请求。...
本文将深入探讨Flex如何与JSON和XML进行互操作,这对于实现客户端与服务器端的数据交换至关重要。 #### Flex与XML的互操作 在Flex中,XML是一种常见的数据交换格式。Flex提供了多种工具和方法来处理XML数据,包括...
Flex数据与通讯主要涉及如何在Flex应用程序中与其他程序进行数据交换和传输,包括内部数据传输以及与外部服务(如HTTPService和WebService)的交互。下面将详细介绍Flex中数据传输的多种方式及其应用。 ### 21.1 ...
Flex4是一种基于ActionScript 3.0的开源框架...通过查看和运行这个示例,你将更深入地理解如何在Flex4中使用`HTTPService`与服务器交换数据。记住,理解XML数据的结构和如何适当地解析它,是使用`HTTPService`的关键。