核心架構:三步驟通訊流程
- 建立請求:
URLRequest 封裝 URL、方法、Header、資料。
- 載入發送:
URLLoader 載入請求並發送。
- 事件監聽:註冊
URLLoader 事件處理回應/錯誤/進度。
URLRequest 關鍵屬性詳解
| 屬性 | 說明 | 範例 |
url |
請求目標網址 (支援相對/絕對路徑) |
var req:URLRequest = new URLRequest("https://api.example.com/data"); |
method |
HTTP 方法:GET / POST (預設 GET) |
req.method = URLRequestMethod.POST; |
requestHeaders |
自訂 HTTP Header (模擬瀏覽器、攜帶 Token 等) |
req.requestHeaders.push(new URLRequestHeader("X-API-Key", "abc123")); |
data |
請求主體資料,**必須封裝為 URLVariables** |
見下方範例 |
URLVariables 封裝請求資料
var vars:URLVariables = new URLVariables();
// 方式 1: 鍵值對 (application/x-www-form-urlencoded)
vars.userId = "123";
vars.action = "login";
// 方式 2: JSON 字串 (需後端支援解析)
vars.jsonData = '{"id":2,"name":"test"}';
var req:URLRequest = new URLRequest("https://localhost:25212/index.aspx");
req.data = vars;
req.method = URLRequestMethod.POST;
URLLoader 事件完整對照
| 事件 | 觸發時機 | 典型用途 |
Event.OPEN |
請求開始建立連線 |
顯示「連線中...」狀態 |
ProgressEvent.PROGRESS |
資料下載中 |
進度條:bytesLoaded / bytesTotal |
Event.COMPLETE |
資料成功載入完成 |
解析 loader.data,主要業務邏輯處 |
IOErrorEvent.IO_ERROR |
網路/HTTP 錯誤 (404, 500, 逾時等) |
錯誤提示、重試邏輯 |
SecurityErrorEvent.SECURITY_ERROR |
跨域策略檔案缺失或拒絕 |
提示跨域問題、引導部署 crossdomain.xml |
URLLoaderDataFormat 回應資料格式指定
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.TEXT; // 預設,純文字
// loader.dataFormat = URLLoaderDataFormat.BINARY; // 二進位 (ByteArray)
// loader.dataFormat = URLLoaderDataFormat.VARIABLES; // URL 編碼變數
完整 POST JSON 範例 (含錯誤處理)
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLRequestMethod;
import flash.events.Event;
import flash.events.IOErrorEvent;
var url:String = "https://localhost:25212/index.aspx";
var vars:URLVariables = new URLVariables();
vars.data = '{"id":"2"}'; // JSON 字串
var req:URLRequest = new URLRequest(url);
req.data = vars;
req.method = URLRequestMethod.POST;
req.requestHeaders.push(new URLRequestHeader("Content-Type", "application/x-www-form-urlencoded"));
var loader:URLLoader = new URLLoader(req);
loader.addEventListener(Event.COMPLETE, onComplete);
loader.addEventListener(IOErrorEvent.IO_ERROR, onError);
function onComplete(e:Event):void {
trace("伺服器回應: " + loader.data);
// 可進一步用 JSON.parse 解析
}
function onError(e:IOErrorEvent):void {
trace("請求失敗: " + e.text);
}
.NET 後端對應處理 (ASP.NET WebForms 範例)
public partial class Index : System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
string data = Request.Form["data"]; // 取得 jsonData 或 data 參數
Response.Write("恭喜,資料請求成功~ " + data);
}
}
進階應用場景
- 跨域存取:伺服器根目錄放置
crossdomain.xml 允許 allow-access-from domain="*"。
- 檔案上傳:配合
FileReference 實現多檔上傳進度監控。
- Socket 通訊:需長連線/即時推送時改用
XMLSocket 或 Socket 類別。
總結
URLRequest + URLLoader 是 AS3 網路通訊基石,掌握 Header/資料封裝、事件流、資料格式、錯誤處理四大面向,即可實現從簡單 API 呼叫到複雜檔案傳輸的各類需求。