FLASHCS3 URLLoader的介绍

URLLoader 类提供了一种单独的机制,用于在数据驱动的应用程序中加载文本和二进制数据

ActionScript 3.0 使用 URLLoader 和 URLVariables 类来加载外部数据。URLLoader 类以文本、二进制数据或 URL 编码变量的形式从 URL 下载数据。URLLoader 类用于下载文本文件、XML 或其它要用于数据驱动的动态 ActionScript 应用程序中的信息。URLLoader 类使用 ActionScript 3.0 高级事件处理模型,使用该模型可以侦听诸如 completehttpStatusioErroropenprogresssecurityError 等事件。新事件处理模型在 ActionScript 2.0 的基础上大大改进了对 LoadVars.onDataLoadVars.onHTTPStatusLoadVars.onLoad 事件处理函数的支持,

如果没有为 URLRequest.contentType 设置值,则以 application/x-www-form-urlencoded 的形式发送值

URLLoader.load() 方法(以及 URLLoader 类的构造函数,可选)使用一个参数,即 request,该参数是一个 URLRequest 实例

 

例如,要将 XML 数据包上载到服务器端脚本,您可以使用下面的 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.yourdomain.com/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.");
}
下面的片断创建 URLRequest 和 URLLoader 对象,用于加载外部文本文件 params.txt 的内容:
var request:URLRequest = new URLRequest("params.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);
默认情况下,如果您未定义请求方法,Flash Player 将使用 HTTP GET 方法加载内容。如果要使用 POST 方法发送数据,则需要使用静态常量 URLRequestMethod.POSTrequest.method 属性设置为 POST,如下面的代码所示:
var request:URLRequest = new URLRequest("sendfeedback.cfm");
request.method = URLRequestMethod.POST;
在运行时加载的外部文档 params.txt 包含以下数据:
monthNames=January,February,March,April,May,June,July,August,September,October,November,December&dayNames=Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday
该文件包含两个参数,即 monthNamesdayNames。每个参数包含一个逗号分隔列表,该列表被分解为字符串。可以使用 String.split() 方法将此列表拆分为数组。

加载数据后,将调度 Event.COMPLETE 事件,现可以在 URLLoaderdata 属性中使用外部文档的内容,如下面的代码所示:

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

如果从外部文本文件加载数值数据,则需要使用顶级函数(如 int()uint()Number())将这些值转换为数值。

无需将远程文件的内容作为字符串加载和新建 URLVariables 对象,您可以将 URLLoader.dataFormat 属性设置为在 URLLoaderDataFormat 类中找到的静态属性之一。URLLoader.dataFormat 属性的三个可能值如下:

  • URLLoaderDataFormat.BINARYURLLoader.data 属性将包含 ByteArray 对象中存储的二进制数据。
  • URLLoaderDataFormat.TEXTURLLoader.data 属性将包含 String 对象中的文本。
  • URLLoaderDataFormat.VARIABLESURLLoader.data 属性将包含 URLVariables 对象中存储的 URL 编码的变量。

下面的代码说明了通过将 URLLoader.dataFormat 属性设置为 URLLoaderDataFormat.VARIABLES,您可以自动将加载的数据分解为 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 相同。可以创建 URLRequest 和 URLLoader 实例,然后使用它们下载远程 XML 文档。文件完全下载后,调度 Event.COMPLETE 事件,并将外部文件的内容转换为可使用 XML 方法和属性分析的 XML 实例。

var myXML:XML = new XML();
var XML_URL:String = "http://www.example.com/Sample3.xml";
var myXMLURL:URLRequest = new URLRequest(XML_URL);
var myLoader:URLLoader = new URLLoader(myXMLURL);
myLoader.addEventListener("complete", xmlLoaded);
function xmlLoaded(event:Event):void
{
myXML = XML(myLoader.data);
trace("Data loaded.");
}

除了加载外部数据文件,还可以使用 URLVariables 类将变量发送到服务器端脚本并处理服务器的响应。这是非常有用的,例如,如果您正在编写游戏,想要将用户的得分发送到服务器以计算是否应添加到高分列表中,也可以将用户的登录信息发送到服务器以进行验证。服务器端脚本可以处理用户名和密码,向数据库验证用户名和密码,然后返回用户提供的凭据是否有效的确认。

下面的片断创建一个名为 variables 的 URLVariables 对象,该对象创建称为 name 的新变量。接下来,创建一个 URLRequest 对象,该对象指定变量要发送到的服务器端脚本的 URL。然后,设置 URLRequest 对象的 method 属性,以便将变量作为 HTTP POST 请求发送。为了将 URLVariables 对象添加到 URL 请求,需要将 URLRequest 对象的 data 属性设置为早先创建的 URLVariables 对象。最后,创建 URLLoader 实例并调用 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);
}
posted @ 2009-03-15 12:48  蓝魔  阅读(1156)  评论(0)    收藏  举报