AS3筆記(13),sendAndLoad的繼承者
更新時間:2008年02月15日 21:43:48 作者:
AS3筆記(13),sendAndLoad的繼承者
在As2中LoadVars和XML都有sendAndLoad方法,該方法可以使用 POST 方法將參數(shù)發(fā)送到指定的URL,下載服務(wù)器的響應(yīng)并接受參數(shù).在As3.0之前,是最普及的數(shù)據(jù)通訊方法之一.在AS3.0以后,XML方法已經(jīng)參照E4X的規(guī)范來定義,早就沒有了sendAndLoad方法,而LoadVars 類更是消失的無影無蹤了。
其實早在AS2中就可以發(fā)現(xiàn),sendAndLoad方法的設(shè)計很不合理,在兩中數(shù)據(jù)對象中存在且機(jī)制相同.現(xiàn)在好了,AS3.0中很好的封裝了這一功能,這就是URLLoader的登場.URLLoader 類以文本、二進(jìn)制數(shù)據(jù)或 URL 編碼變量的形式從 URL 下載數(shù)據(jù)。 在下載文本文件、XML 或其它用于動態(tài)數(shù)據(jù)驅(qū)動應(yīng)用程序的信息時,它很有用。可見,除了原有的variables和xml的數(shù)據(jù)加載方法,現(xiàn)在還多出了二進(jìn)制數(shù)據(jù)方法,這個暫時不提,先說一下模擬AS2中兩個sendAndLoad的方法。完成這些方法,我們還需要下列類的幫助:
URLRequest 類
URLVariables類
URLRequest 類用以捕獲單個HTTP 請求中的所有信息,URLVariables 類可以在Flash 應(yīng)用程序和服務(wù)器之間傳輸變量.詳細(xì)的說明請參看幫助.下例為一個sendAndLoad方法范例:
sendAndLoadEX.as
/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.15
Info:sendAndLoad
*/
package {
import flash.events.*;
import flash.net.*;
import flash.display.Sprite;
public class sendAndLoadEX extends Sprite {
private var xmlData:XML;
private var uReq:URLRequest;
private var uLoader:URLLoader=new URLLoader();
private var uVar:URLVariables=new URLVariables();
public function sendAndLoadEX() {
startLoad();
}
/*
加載url
*/
private function startLoad():void {
//定義參數(shù)
uVar.param="You are now visting www.2solo.cn";//返回的參數(shù)
uVar.vtype="xml";//返回類型
//uVar.vtype = "var";
uReq=new URLRequest("your url");
//方法類型
uReq.method=URLRequestMethod.POST;
uReq.data=uVar;
//定義參數(shù)格式
uLoader.dataFormat=URLLoaderDataFormat.TEXT;
//uLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
uLoader.addEventListener(Event.COMPLETE,completeHandler);
uLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
uLoader.load(uReq);
}
/*
加載成功
*/
private function completeHandler(evt:Event):void {
trace("成功");
//trace(evt.currentTarget.data.vars);
xmlData=new XML(evt.currentTarget.data);
parseXml();
}
/*
加載失敗
*/
private function ioErrorHandler(evt:IOErrorEvent):void {
trace("失敗");
}
/*
解析xml
*/
private function parseXml() {
trace(xmlData.child("param")[0]);
}
}
}
運行上例的輸出結(jié)果為:"You are now visting www.2solo.cn".我在該例子中模擬的是XML.sendAndLoad方法,服務(wù)端我使用asp做測試,代碼如下:
test.asp
<%
Response.CodePage=65001
Response.Charset="UTF-8"
if request("vtype")="xml" THEN
response.write "<?xml version=""1.0"" encoding=""utf-8""?><data>"
response.write "<param>"&request("param")&"</param>"
response.write "</data>"
ELSEIF request("vtype")="var" THEN
response.write "vars="&request("param")
END IF
%>
在sendAndLoadEX.as中,uVar.param和uVar.vtype做為兩個參數(shù)post給服務(wù)器端文件.uVar.param將作為參數(shù)返回,uVar.vtype則做為返回XML或Vars的判斷.上例中,如要測試Loadvars.sendAndLoad,可以將:
//uVar.vtype = "var";
//uLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
//trace(evt.currentTarget.data.vars);
的注釋去掉,其中evt.currentTarget.data.vars屬性直接來自test.asp的輸出值,這點用原來的loadvars裝載返回數(shù)據(jù)的方式一樣。URLLoaderDataFormat有三個類型,除了TEXT,VARIABLES,還有BINARY做了二進(jìn)制編碼的格式.最后值得一提的是,AS3允許通過URLRequestHeader對文件頭進(jìn)行操作,這是一個很重要的提升.
最后附上本例源文件:
http://xiazai.jb51.net/flash/sendAndLoadEX_2soloDOTcn.zip
其實早在AS2中就可以發(fā)現(xiàn),sendAndLoad方法的設(shè)計很不合理,在兩中數(shù)據(jù)對象中存在且機(jī)制相同.現(xiàn)在好了,AS3.0中很好的封裝了這一功能,這就是URLLoader的登場.URLLoader 類以文本、二進(jìn)制數(shù)據(jù)或 URL 編碼變量的形式從 URL 下載數(shù)據(jù)。 在下載文本文件、XML 或其它用于動態(tài)數(shù)據(jù)驅(qū)動應(yīng)用程序的信息時,它很有用。可見,除了原有的variables和xml的數(shù)據(jù)加載方法,現(xiàn)在還多出了二進(jìn)制數(shù)據(jù)方法,這個暫時不提,先說一下模擬AS2中兩個sendAndLoad的方法。完成這些方法,我們還需要下列類的幫助:
URLRequest 類
URLVariables類
URLRequest 類用以捕獲單個HTTP 請求中的所有信息,URLVariables 類可以在Flash 應(yīng)用程序和服務(wù)器之間傳輸變量.詳細(xì)的說明請參看幫助.下例為一個sendAndLoad方法范例:
sendAndLoadEX.as
/*@
Author:frank
Site:www.2solo.cn
Date:2008.02.15
Info:sendAndLoad
*/
package {
import flash.events.*;
import flash.net.*;
import flash.display.Sprite;
public class sendAndLoadEX extends Sprite {
private var xmlData:XML;
private var uReq:URLRequest;
private var uLoader:URLLoader=new URLLoader();
private var uVar:URLVariables=new URLVariables();
public function sendAndLoadEX() {
startLoad();
}
/*
加載url
*/
private function startLoad():void {
//定義參數(shù)
uVar.param="You are now visting www.2solo.cn";//返回的參數(shù)
uVar.vtype="xml";//返回類型
//uVar.vtype = "var";
uReq=new URLRequest("your url");
//方法類型
uReq.method=URLRequestMethod.POST;
uReq.data=uVar;
//定義參數(shù)格式
uLoader.dataFormat=URLLoaderDataFormat.TEXT;
//uLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
uLoader.addEventListener(Event.COMPLETE,completeHandler);
uLoader.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
uLoader.load(uReq);
}
/*
加載成功
*/
private function completeHandler(evt:Event):void {
trace("成功");
//trace(evt.currentTarget.data.vars);
xmlData=new XML(evt.currentTarget.data);
parseXml();
}
/*
加載失敗
*/
private function ioErrorHandler(evt:IOErrorEvent):void {
trace("失敗");
}
/*
解析xml
*/
private function parseXml() {
trace(xmlData.child("param")[0]);
}
}
}
運行上例的輸出結(jié)果為:"You are now visting www.2solo.cn".我在該例子中模擬的是XML.sendAndLoad方法,服務(wù)端我使用asp做測試,代碼如下:
test.asp
<%
Response.CodePage=65001
Response.Charset="UTF-8"
if request("vtype")="xml" THEN
response.write "<?xml version=""1.0"" encoding=""utf-8""?><data>"
response.write "<param>"&request("param")&"</param>"
response.write "</data>"
ELSEIF request("vtype")="var" THEN
response.write "vars="&request("param")
END IF
%>
在sendAndLoadEX.as中,uVar.param和uVar.vtype做為兩個參數(shù)post給服務(wù)器端文件.uVar.param將作為參數(shù)返回,uVar.vtype則做為返回XML或Vars的判斷.上例中,如要測試Loadvars.sendAndLoad,可以將:
//uVar.vtype = "var";
//uLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
//trace(evt.currentTarget.data.vars);
的注釋去掉,其中evt.currentTarget.data.vars屬性直接來自test.asp的輸出值,這點用原來的loadvars裝載返回數(shù)據(jù)的方式一樣。URLLoaderDataFormat有三個類型,除了TEXT,VARIABLES,還有BINARY做了二進(jìn)制編碼的格式.最后值得一提的是,AS3允許通過URLRequestHeader對文件頭進(jìn)行操作,這是一個很重要的提升.
最后附上本例源文件:
http://xiazai.jb51.net/flash/sendAndLoadEX_2soloDOTcn.zip
相關(guān)文章
利用asp或jsp,flash怎樣把數(shù)據(jù)庫中的一張表中的所有記錄讀取并顯示出來
利用asp或jsp,flash怎樣把數(shù)據(jù)庫中的一張表中的所有記錄讀取并顯示出來...2006-11-11在Flash中用as實現(xiàn)lrc歌詞動態(tài)顯示
在Flash中用as實現(xiàn)lrc歌詞動態(tài)顯示...2007-03-03圖文演示Flash+ASP實現(xiàn)用戶登錄/注冊程序
圖文演示Flash+ASP實現(xiàn)用戶登錄/注冊程序...2007-12-12