小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ActionScript 3.0 讀txt

 樂樂媽 2010-06-10

處理外部數(shù)據(jù)

ActionScript 3.0 包含用于從外部源加載數(shù)據(jù)的機制。這些源可以是靜態(tài)內(nèi)容(如文本文件),也可以是動態(tài)內(nèi)容(如從數(shù)據(jù)庫檢索數(shù)據(jù)的 Web 腳本)。可以使用多種不同的方法來設(shè)置數(shù)據(jù)的格式,并且 ActionScript 提供了用于解碼和訪問數(shù)據(jù)的功能。也可以在檢索數(shù)據(jù)的過程中將數(shù)據(jù)發(fā)送到外部服務(wù)器。

子主題

使用 URLLoader 類和 URLVariables 類
從外部文檔加載數(shù)據(jù)
與外部腳本進行通信

使用 URLLoader 類和 URLVariables 類

ActionScript 3.0 使用 URLLoader 和 URLVariables 類來加載外部數(shù)據(jù)。URLLoader 類以文本、二進制數(shù)據(jù)或 URL 編碼變量的形式從 URL 下載數(shù)據(jù)。URLLoader 類用于下載文本文件、XML 或其它要用于數(shù)據(jù)驅(qū)動的動態(tài) ActionScript 應(yīng)用程序中的信息。URLLoader 類使用 ActionScript 3.0 高級事件處理模型,使用該模型可以偵聽諸如 completehttpStatus、ioError、open、progresssecurityError 等事件。新事件處理模型在 ActionScript 2.0 的基礎(chǔ)上大大改進了對 LoadVars.onDataLoadVars.onHTTPStatusLoadVars.onLoad 事件處理函數(shù)的支持,可以更高效地處理錯誤和事件。有關(guān)處理事件的詳細信息,請參閱處理事件.

與早期版本 ActionScript 中的 XML 和 LoadVars 類非常相似,URLLoader URL 的數(shù)據(jù)在下載完成之前不可用。盡管如果文件加載速度太快,可能不會調(diào)度 ProgressEvent.PROGRESS 事件,但您可以通過偵聽要調(diào)度的 flash.events.ProgressEvent.PROGRESS 事件來監(jiān)視下載進度(已加載的字節(jié)數(shù)和總字節(jié)數(shù))。成功下載文件后,將調(diào)度 flash.events.Event.COMPLETE 事件。加載的數(shù)據(jù)將從 UTF-8 或 UTF-16 編碼被解碼為字符串。

注意

 

如果沒有為 URLRequest.contentType 設(shè)置值,則以 application/x-www-form-urlencoded 的形式發(fā)送值。

URLLoader.load() 方法(以及 URLLoader 類的構(gòu)造函數(shù),可選)使用一個參數(shù),即 request,該參數(shù)是一個 URLRequest 實例。URLRequest 實例包含單個 HTTP 請求的所有信息,如目標 URL、請求方法(GETPOST)、附加標頭信息以及 MIME 類型(例如,當(dāng)上載 XML 內(nèi)容時)。

例如,要將 XML 數(shù)據(jù)包上載到服務(wù)器端腳本,您可以使用下面的 ActionScript 3.0 代碼:

var secondsUTC:Number = new Date().time;
var dataXML:XML =
<login>
<time>{secondsUTC}</time>
<username>Ernie</username>
<password>guru</password>
</login>;
var request:URLRequest = new URLRequest("http://www./login.cfm");
request.contentType = "text/xml";
request.data = dataXML.toXMLString();
request.method = URLRequestMethod.POST;
var loader:URLLoader = new URLLoader();
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}

上面的代碼片段創(chuàng)建了一個名為 dataXML 的 XML 實例,其中包含要發(fā)送到服務(wù)器的 XML 數(shù)據(jù)包。接下來,將 URLRequest contentType 屬性設(shè)置為“text/xml”,將 URLRequest data 屬性設(shè)置為 XML 數(shù)據(jù)包的內(nèi)容(通過 XML.toXMLString() 方法將該內(nèi)容轉(zhuǎn)換為字符串)。最后,創(chuàng)建一個新的 URLLoader 實例,并使用 URLLoader.load() 方法將請求發(fā)送到遠程腳本。

可以使用三種方式指定要在 URL 請求中傳遞的參數(shù):

  • 在 URLVariables 構(gòu)造函數(shù)中
  • URLVariables.decode() 方法中
  • 作為 URLVariables 對象本身中的特定屬性

當(dāng)定義 URLVariables 構(gòu)造函數(shù)或 URLVariables.decode() 方法中的變量時,需要確保對“and”符進行 URL 編碼,因為它具有特殊含義并作為分隔符使用。例如,由于與號作為參數(shù)的分隔符使用,當(dāng)傳遞與號時,需要將與號從 & 更改為 %26 來對與號進行 URL 編碼。

從外部文檔加載數(shù)據(jù)

當(dāng)使用 ActionScript 3.0 生成動態(tài)應(yīng)用程序時,最好從外部文件或服務(wù)器端腳本加載數(shù)據(jù)。這樣,您不必編輯或重新編譯 ActionScript 文件,即可生成動態(tài)應(yīng)用程序。例如,如果生成“每日提示”應(yīng)用程序,您可以編寫一個服務(wù)器端腳本,該腳本每天從數(shù)據(jù)庫檢索一次隨機提示并將其保存到文本文件。然后,ActionScript 應(yīng)用程序可以加載靜態(tài)文本文件的內(nèi)容,而不必每次查詢數(shù)據(jù)庫。

下面的片斷創(chuàng)建 URLRequest 和 URLLoader 對象,用于加載外部文本文件 params.txt 的內(nèi)容:

var request:URLRequest = new URLRequest("params.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);

可以將上面的片斷簡化如下:

var loader:URLLoader = new URLLoader(new URLRequest("params.txt"));

默認情況下,如果您未定義請求方法,F(xiàn)lash Player 將使用 HTTP GET 方法加載內(nèi)容。如果要使用 POST 方法發(fā)送數(shù)據(jù),則需要使用靜態(tài)常量 URLRequestMethod.POSTrequest.method 屬性設(shè)置為 POST,如下面的代碼所示:

var request:URLRequest = new URLRequest("sendfeedback.cfm");
request.method = URLRequestMethod.POST;

在運行時加載的外部文檔 params.txt 包含以下數(shù)據(jù):

monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday

該文件包含兩個參數(shù),即 monthNamesdayNames。每個參數(shù)包含一個逗號分隔列表,該列表被分解為字符串??梢允褂?String.split() 方法將此列表拆分為數(shù)組。

提示

 

不要將保留字或語言構(gòu)造作為外部數(shù)據(jù)文件中的變量名稱,因為這樣做會使代碼的讀取和調(diào)試變得更困難。

加載數(shù)據(jù)后,將調(diào)度 Event.COMPLETE 事件,現(xiàn)可以在 URLLoader 的 data 屬性中使用外部文檔的內(nèi)容,如下面的代碼所示:

private function completeHandler(event:Event):void
{
var loader2:URLLoader = URLLoader(event.target);
trace(loader2.data);
}

如果遠程文檔包含名稱-值對,您可以通過傳入加載文件的內(nèi)容,使用 URLVariables 類來分析數(shù)據(jù),如下所示:

private function completeHandler(event:Event):void
{
var loader2:URLLoader = URLLoader(event.target);
var variables:URLVariables = new URLVariables(loader2.data);
trace(variables.dayNames);
}

外部文件中的每個名稱-值對都創(chuàng)建為 URLVariables 對象中的一個屬性。在上面的代碼范例中,變量對象中的每個屬性都被視為字符串。如果名稱-值對是一個項目列表,您可以通過調(diào)用 String.split() 方法將字符串轉(zhuǎn)換為數(shù)組,如下所示:

var dayNameArray:Array = variables.dayNames.split(",");

提示

 

如果從外部文本文件加載數(shù)值數(shù)據(jù),則需要使用頂級函數(shù)(如 int()、uint()Number())將這些值轉(zhuǎn)換為數(shù)值。

無需將遠程文件的內(nèi)容作為字符串加載和新建 URLVariables 對象,您可以將 URLLoader.dataFormat 屬性設(shè)置為在 URLLoaderDataFormat 類中找到的靜態(tài)屬性之一。URLLoader.dataFormat 屬性的三個可能值如下:

  • URLLoaderDataFormat.BINARYURLLoader.data 屬性將包含 ByteArray 對象中存儲的二進制數(shù)據(jù)。
  • URLLoaderDataFormat.TEXTURLLoader.data 屬性將包含 String 對象中的文本。
  • URLLoaderDataFormat.VARIABLESURLLoader.data 屬性將包含 URLVariables 對象中存儲的 URL 編碼的變量。

下面的代碼說明了通過將 URLLoader.dataFormat 屬性設(shè)置為 URLLoaderDataFormat.VARIABLES,您可以自動將加載的數(shù)據(jù)分解為 URLVariables 對象:

package
{
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;
public class URLLoaderDataFormatExample extends Sprite
{
public function URLLoaderDataFormatExample()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/params.txt");
var variables:URLLoader = new URLLoader();
variables.dataFormat = URLLoaderDataFormat.VARIABLES;
variables.addEventListener(Event.COMPLETE, completeHandler);
try
{
variables.load(request);
}
catch (error:Error)
{
trace("Unable to load URL: " + error);
}
}
private function completeHandler(event:Event):void
{
var loader:URLLoader = URLLoader(event.target);
trace(loader.data.dayNames);
}
}
}

注意

 

URLLoader.dataFormat 的默認值為 URLLoaderDataFormat.TEXT。

如下面的實例所示,從外部文件加載 XML 與加載 URLVariables 相同??梢詣?chuàng)建 URLRequest 和 URLLoader 實例,然后使用它們下載遠程 XML 文檔。文件完全下載后,調(diào)度 Event.COMPLETE 事件,并將外部文件的內(nèi)容轉(zhuǎn)換為可使用 XML 方法和屬性分析的 XML 實例。

package
{
import flash.display.Sprite;
import flash.errors.*;
import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
public class ExternalDocs extends Sprite
{
public function ExternalDocs()
{
var request:URLRequest = new URLRequest("http://www.[yourdomain].com/data.xml");
var loader:URLLoader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
try
{
loader.load(request);
}
catch (error:ArgumentError)
{
trace("An ArgumentError has occurred.");
}
catch (error:SecurityError)
{
trace("A SecurityError has occurred.");
}
}
private function completeHandler(event:Event):void
{
var dataXML:XML = XML(event.target.data);
trace(dataXML.toXMLString());
}
}
}

與外部腳本進行通信

除了加載外部數(shù)據(jù)文件,還可以使用 URLVariables 類將變量發(fā)送到服務(wù)器端腳本并處理服務(wù)器的響應(yīng)。這是非常有用的,例如,如果您正在編寫游戲,想要將用戶的得分發(fā)送到服務(wù)器以計算是否應(yīng)添加到高分列表中,也可以將用戶的登錄信息發(fā)送到服務(wù)器以進行驗證。服務(wù)器端腳本可以處理用戶名和密碼,向數(shù)據(jù)庫驗證用戶名和密碼,然后返回用戶提供的憑據(jù)是否有效的確認。

下面的片斷創(chuàng)建一個名為 variables 的 URLVariables 對象,該對象創(chuàng)建稱為 name 的新變量。接下來,創(chuàng)建一個 URLRequest 對象,該對象指定變量要發(fā)送到的服務(wù)器端腳本的 URL。然后,設(shè)置 URLRequest 對象的 method 屬性,以便將變量作為 HTTP POST 請求發(fā)送。為了將 URLVariables 對象添加到 URL 請求,需要將 URLRequest 對象的 data 屬性設(shè)置為早先創(chuàng)建的 URLVariables 對象。最后,創(chuàng)建 URLLoader 實例并調(diào)用 URLLoader.load() 方法,此方法用于啟動該請求。

var variables:URLVariables = new URLVariables("name=Franklin");
var request:URLRequest = new URLRequest();
request.url = "http://www.[yourdomain].com/greeting.cfm";
request.method = URLRequestMethod.POST;
request.data = variables;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, completeHandler);
try
{
loader.load(request);
}
catch (error:Error)
{
trace("Unable to load URL");
}
function completeHandler(event:Event):void
{
trace(event.target.data.welcomeMessage);
}

下面的代碼包含上面的示例中使用的 Adobe ColdFusion? greeting.cfm 文檔的內(nèi)容:

<cfif NOT IsDefined("Form.name") OR Len(Trim(Form.Name)) EQ 0>
<cfset Form.Name = "Stranger" />
</cfif>
<cfoutput>welcomeMessage=#UrlEncodedFormat("Welcome, " & Form.name)#
</cfoutput>
相關(guān)主題
Popup
Popup


    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多