最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Flex與.NET互操作 使用HttpService、URLReqeust和URLLoader加載/傳輸數(shù)據(jù)

 更新時間:2009年06月15日 20:07:07   作者:  
在前兩篇文章中分別介紹了Flex與.NET的WebService之間的數(shù)據(jù)交互通信知識,本文將介紹另外一種加載數(shù)據(jù)以及發(fā)起請求的方式。

ActionScript 3.0中提供的數(shù)據(jù)加載請求類主要是HTTPService,URLLoader和URLRequest,可以通過他們協(xié)同來完成數(shù)據(jù)加載和請求。下面我么便來看看這三個類是怎么來完成數(shù)據(jù)加載工作。

     在本地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傳遞和加載數(shù)據(jù)

     使用HTTPService可以實現(xiàn)加載數(shù)據(jù),也可以實現(xiàn)參數(shù)傳遞,下面通過兩個示例程序來講解這兩個知識點。

     首先來看看HTTPService加載數(shù)據(jù)的方式。在Flex中使用HTTPService來裝載外部數(shù)據(jù)是非常簡單的,他是基于 HTTP協(xié)議發(fā)送POST和GET請求外部數(shù)據(jù),然后通過指定的監(jiān)聽方法來處理響應。我們可以通過<mx:HTTPService>標簽來完成對數(shù)據(jù)源的連接,也可以通過可編程方式來處理,兩種方式?jīng)]什么大的差距,實際開發(fā)中可以根據(jù)自己喜好選擇。

 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 }

     該示例的運行結果見文章最后,下面是這個示例的完整代碼:

完整示例代碼

     OK,我們來看看使用HTTPService傳遞參數(shù)到服務端是怎么實現(xiàn)的。使用HTTPService傳遞參數(shù)可以通過兩種方式實現(xiàn),分別如下:

     1、直接在請求URL后面跟上參數(shù)列表,如:http://localhost/web/Test.aspx?a=1&b=2。

     2、通過Flex SDK為我們提供專門用語參數(shù)傳遞的對象(URLVariables)來實現(xiàn)。

     下面以一道簡單的加法運算來演示HTTPService傳遞參數(shù)的使用,在Flex里將需要進行加法運算的兩個數(shù)傳遞到.NET服務端并計算其和后返回給Flex客戶端,兩種方式傳遞沒有太大的區(qū)別,詳細請看如下代碼演示:

 1 /**
 2  * 通過RUL參數(shù)直接傳遞
 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進行參數(shù)傳遞
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()方法相互切換來測試兩種不同的參數(shù)傳遞方式。

完整的示例代碼
OperationHandler.ashx

     上面示例的運行界面截圖:

          


 

二、了解URLReqeust

     使用URLRequest 類可捕獲單個 HTTP 請求中的所有信息。將URLRequest 對象傳遞給URLStream或URLLoader 類以及其他加載操作的load()方法以啟動URL數(shù)據(jù)加載。它的使用很簡單,通過構造方法構造對象就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()方法便可實現(xiàn)數(shù)據(jù)加載。從某種角度可以將 URLRequest理解為建立請求的工具。要是URLRequest類對象變成可用的對象還需得通過其他類來與之配合協(xié)作,詳細見后面使用 URLLoader加載數(shù)據(jù)。

     URLRequest雖然功能強大,使用簡單。但我們還是需要了解更多的東西,以便可以正確的應用URLRequest類和處理相應的錯誤。其中最引人關注的就是安全沙箱的問題,這部分我將在以后的文章中介紹,這里只需要記住兩點就OK。  

     1、如果執(zhí)行調用的 SWF 文件在只能與本地文件系統(tǒng)內容交互的沙箱中,而目標資源來自網(wǎng)絡沙箱,則不允許進行數(shù)據(jù)加載。

     2、如果執(zhí)行調用的 SWF 文件來自網(wǎng)絡沙箱而目標資源在本地,也不允許進行數(shù)據(jù)加載。

     這里就簡單介紹這些,關于URLRequest的詳細資料大家可以查看官方提供的在線文檔:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLRequest.html


 

三、使用URLLoader加載數(shù)據(jù)

     URLLoader 類可以以文本、二進制數(shù)據(jù)或 URL 編碼變量的形式從 URL 下載數(shù)據(jù)。下面將結合使用本地服務器上的數(shù)據(jù)(詳細見文章前面的xml文件定義)的加載示例來演示URLLoader的使用方法。 

      那我們怎么通過URLLoader來加載它呢?很簡單,使用上面介紹的URLRequest來創(chuàng)建請求連接,然后將URLRequest對象傳遞給URLLoader的load方法來實現(xiàn)數(shù)據(jù)加載。

 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完整代碼

     本示例的運行結果如下圖:

       

關于URLLoader的更多資料大家可以查看Adobe提供的在線文檔:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLLoader.html

p;          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傳遞參數(shù)">
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

     上面示例的運行界面截圖:

          


 

二、了解URLReqeust

     使用URLRequest 類可捕獲單個 HTTP 請求中的所有信息。將URLRequest 對象傳遞給URLStream或URLLoader 類以及其他加載操作的load()方法以啟動URL數(shù)據(jù)加載。它的使用很簡單,通過構造方法構造對象就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()方法便可實現(xiàn)數(shù)據(jù)加載。從某種角度可以將 URLRequest理解為建立請求的工具。要是URLRequest類對象變成可用的對象還需得通過其他類來與之配合協(xié)作,詳細見后面使用 URLLoader加載數(shù)據(jù)。

     URLRequest雖然功能強大,使用簡單。但我們還是需要了解更多的東西,以便可以正確的應用URLRequest類和處理相應的錯誤。其中最引人關注的就是安全沙箱的問題,這部分我將在以后的文章中介紹,這里只需要記住兩點就OK。  

     1、如果執(zhí)行調用的 SWF 文件在只能與本地文件系統(tǒng)內容交互的沙箱中,而目標資源來自網(wǎng)絡沙箱,則不允許進行數(shù)據(jù)加載。

     2、如果執(zhí)行調用的 SWF 文件來自網(wǎng)絡沙箱而目標資源在本地,也不允許進行數(shù)據(jù)加載。

     這里就簡單介紹這些,關于URLRequest的詳細資料大家可以查看官方提供的在線文檔:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLRequest.html


 

三、使用URLLoader加載數(shù)據(jù)

     URLLoader 類可以以文本、二進制數(shù)據(jù)或 URL 編碼變量的形式從 URL 下載數(shù)據(jù)。下面將結合使用本地服務器上的數(shù)據(jù)(詳細見文章前面的xml文件定義)的加載示例來演示URLLoader的使用方法。 

      那我們怎么通過URLLoader來加載它呢?很簡單,使用上面介紹的URLRequest來創(chuàng)建請求連接,然后將URLRequest對象傳遞給URLLoader的load方法來實現(xiàn)數(shù)據(jù)加載。

 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完整代碼

     本示例的運行結果如下圖:

       

關于URLLoader的更多資料大家可以查看Adobe提供的在線文檔:http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/net/URLLoader.html

相關文章

最新評論

开封县| 鄂伦春自治旗| 新余市| 象山县| 崇文区| 漯河市| 正镶白旗| 宁安市| 双柏县| 林口县| 加查县| 湘潭县| 天津市| 颍上县| 肇庆市| 乌苏市| 庄浪县| 郴州市| 阜宁县| 年辖:市辖区| 山东省| 日土县| 宜兰县| 包头市| 湟源县| 五莲县| 竹山县| 新宾| 田阳县| 瓦房店市| 霍城县| 江西省| 镇坪县| 南陵县| 卢龙县| 靖江市| 元朗区| 琼结县| 海盐县| 腾冲县| 大安市|