怎么樣,是不是也很方便的實現了as3和后臺的數據傳輸?恩,現在我們的程序可以雙向交互數據了,但這只是一些簡單的數據,如果你要傳輸帶有結構的數據,(熟悉as2的人都知道loadVars可以自動解析下載數據的結構),讓我們先按loadVars的方式來嘗試下,看看URLLoader是不是能自動的解析下載的數據。
//actionscript
code
varloader:URLLoader
= new URLLoader();
//聲明一個URLRequest
varurl:URLRequest
= new URLRequest("test.php");
//設置傳輸方式為POST
url.method
= URLRequestMethod.POST;
//聲明一個URLVariables
varvalues:URLVariables
= new URLVariables();
//設置要傳輸的信息
values.message="hello im
flash!";
url.data
= values;
loader.addEventListener(Event.COMPLETE,loaded);
functionloaded(e:Event){
trace(loader.data);
//outPut: phpMessage=im php
message!&flashMessage=hello im
flash!
trace(loader.data.phpMessage);
// thorw Error;
trace(loader.data.flashMessage);
// thorw Error;
}
loader.load(url);
//test.php
code//
$flashData
= $_POST['message'];
$phpMessage
= 'im php
message!';
echo"phpMessage=$phpMessage&flashMessage=$flashData";
?>
可以看到,數據被完全下載下來了,但是卻沒有被解析,還拋出了異常,那么是不是URLLoader就不能自動解析數據了呢?不是,相反
URLLoader提供了多種數據解析方式供你選擇。這些數據解析方式都在URLLoaderDataFormat里,他們是:BINARY-以2進制的方式解析
TEXT-以文本的方式解析
VARIABLES-以變量-值配對的方式解析。URLLoader的dataFormat屬性提供了對解析方式的選擇,好,我們再來修改下程序使它變的更完美些:
//actionscript
code
varloader:URLLoader
= new URLLoader();
//聲明一個URLRequest
varurl:URLRequest
= new URLRequest("test.php");
//設置傳輸方式為POST
url.method
= URLRequestMethod.POST;
//聲明一個URLVariables
varvalues:URLVariables
= new URLVariables();
//設置要傳輸的信息
values.message="hello im
flash!";
url.data
= values;
//設置以變量-值配對的方式解析數據
loader.dataFormat
= URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE,loaded);
functionloaded(e:Event){
trace(loader.data);
//outPut: phpMessage=im php
message!&flashMessage=hello im
flash!
trace(loader.data.phpMessage);
// im php
message!
trace(loader.data.flashMessage);
// hello im
flash!
}
loader.load(url);
//test.php
code//
$flashData
= $_POST['message'];
$phpMessage
= 'im php
message!';
echo"phpMessage=$phpMessage&flashMessage=$flashData";
?>
以上這些就是as3里和后臺交互的基礎內容,現在你可以在as3里創建這樣的交互,獲取動態數據來豐富你的程序,在你開始自己動手實驗之前,還有一些東西值得注意:
1,記得捕獲和處理異常(上述的例子里都是假定在完美的測試環境下運行,所以沒有加上異常捕獲和處理的代碼,但現實中你可能會遇到各種各樣的情況)URLLoader可能引發好幾種異常情況(詳細請參見說明文檔)
你應該通過監聽ioError和securityError事件,或者通過try-catch來處理他們,即使你確信不會發生這樣的問題。
2,文件的編碼,這是個常見的問題,經常很多數據變成了亂碼,或者解析出錯,都是因為編碼的問題,我的做法是確保發送的數據和后臺傳回的數據都是UTF-8格式(因為flash默認編碼為utf-8)
最后希望這篇文章能對你有所幫助,也歡迎你留言討論相關的問題。