在Flex中使用HTTPService傳遞引數

2021-09-22 11:20:42 字數 2797 閱讀 2308

先摘錄httpservice的adobe關於mxml的官方內容如下:

在 mxml 檔案中使用 標籤代表 httpservice 物件。當呼叫 httpservice 物件的 send() 方法時,將發出對指定 url 的 http 請求,並且返回 http 響應。可以選擇向指定 url 傳遞引數。如果沒有使用基於伺服器的**服務,則只能使用 http get 或 post 方法。如果將 useproxy 屬性設定為 true 並使用基於伺服器的**服務,則還可以使用 http head、options、trace 和 delete 方法。

注意:由於軟體限制,當使用 get 時 httpservice 不生成使用者介面友好的錯誤訊息。

mxml 語法

源文件 <>

按照mxml的語法傳引數時可以使用標記,需要放在fx:declarations標籤裡,例子如下:

resultformat="xml" fault="[失敗處理方法,記得把事件傳過去]"

result="[結果處理方法,記得把事件傳過去]">

[account]

[password]

也可以在actionscript裡使用物件的方式,例子如下:

service.url = "[http://位址|https://位址]";

service.useproxy = false;

service.resultformat="xml";

service.addeventlistener(resultevent.result,[結果處理方法,記得把事件傳過去]);

service.addeventlistener(faultevent.fault,[失敗處理方法,記得把事件傳過去]);

var parameter:urlvariables = new urlvariables();

parameter.account = [account];

parameter.password = [password];

service.send(parameter);

在使用urlvariables時碰到乙個問題,如果引數名本身就含有選擇符「.」,比如:

var parameter:urlvariables = new urlvariables();

parameter.account.system = [account];

parameter.password.system = [password];

執行時會報錯如下:

typeerror: error #1010: 術語尚未定義,並且無任何屬性。

at com.adobe.sample::sample/dologonsubmit()[f:\[mxml路徑]\sample.mxml:xx]

at flash.events::eventdispatcher/dispatcheventfunction()

at flash.events::eventdispatcher/dispatchevent()

at mx.core::uicomponent/dispatchevent()[e:\dev\4.y\frameworks\projects\framework\src\mx\core\uicomponent.as:13152]

at com.adobe.sample::logonform/validate()[f:\[mxml路徑]\logonform.mxml:xx]

at com.adobe.sample::logonform/__logonsubmit_click()[f:\[mxml路徑]\logonform.mxml:xx]

要傳遞帶選擇符的引數,使用如下方法:

var parameter:object = ;

好了,這裡還要做的就是亂碼問題,對於中文這樣的多位元組文字需要編碼後傳到伺服器,編碼方式簡單介紹如下:

1、escape,對0-255以外的unicode值進行編碼時輸出%u****格式。

2、encodeuri,將字串編碼為有效的 uri(統一資源識別符號)。將完整的 uri 轉換為乙個字串,其中除屬於一小組基本字元的字元外,其他所有字元都以 utf-8 

轉義序列進行編碼。

3、encodeuricomponent:將字串編碼為有效的 uri 元件。將 uri 的子字串轉換為乙個字串,其中除屬於非常小的一組基本字元的字元外,其他所有字元都以

utf-8轉義序列進行編碼。encodeuricomponent() 函式與 encodeuri() 函式不同,它僅適用於 uri 字串的一部分(稱為 uri 元件)。uri 元件是指出現在某些特殊字元

之間的任何文字,這些特殊字元稱為元件分隔符(: / ; 和 ? )。「http」和「www.adobe.com」是常見的 uri 元件示例。

此函式與 encodeuri() 的另乙個重要區別是:由於此函式假定它處理的是 uri 元件,因此它會將特殊分隔符字元 (; / ? : @ & = + $ , #) 視為應進行編碼的常規文字。

encodeuricomponent是將中文、韓文等特殊字元轉換成utf-8格式的url編碼,所以如果給後台傳遞引數需要使用encodeuricomponent時需要後台解碼對utf-8支援。 

具體採用哪種方式需要配合伺服器端的解碼方式,如果伺服器端的解碼方式已經固定了,則還可以對編碼結果進行替換等處理,如果伺服器端的解碼方式還沒有那就隨便了。

分類: flex

在Flex中使用訊息服務

flex與伺服器的通訊元件除了httpservice,remoteobject,webservice外,還有producer consumer元件。producer和consumer使用messaging的方式通訊,與請求響應機制不同,這是一鐘發布訂閱機制。客戶端向伺服器訂閱訊息,當伺服器訊息發生變...

flex在for迴圈中使用setTimeout

有時候我們需要在flex中使用延時載入的功能,下面我簡單記錄一下如何在for迴圈中使用flex延時載入方法settimeout的用法 方法如下 flash.utils.settimeout closure function,delay number,parameters uint 引數詳解 clos...

在flex中使用CSS改變控制項樣式

昨天在搞乙個對話方塊的外觀 使用css搞定 http www.riashanghai.com node 7這篇文章對我幫助很大 心得寫一下,自己留著好看 需要乙個css檔案,例如default.css 在mxml中需要使用 進行 對控制項進行繫結 例如 控制項 mybutton 需要在default...