构建动态应用程序时,从外部文件或从服务器端脚本加载数据会很有用。这样,您不必编辑或重新编译应用程序,即可生成动态应用程序。例如,如果您要构建一个“每日提示”应用程序,就可以编写一个服务器端脚本,该脚本每天从数据库检索一次随机提示并将其保存到文本文件。然后,应用程序可以加载静态文本文件的内容,而不必每次查询数据库。
下面的片断创建 URLRequest 和 URLLoader 对象,用于加载外部文本文件 params.txt 的内容:
var request = new air.URLRequest("params.txt");
var loader = new air.URLLoader();
loader.load(request);
默认情况下,如果您未定义请求方法,则 Flash Player 和 Adobe AIR 会使用 HTTP
GET
方法加载内容。要使用
POST
方法发送请求,可使用静态常量
URLRequestMethod.POST
将
request.method
属性设置为
POST
,如以下代码所示:
var request = new air.URLRequest("http://www.example.com/sendfeedback.cfm");
request.method = air.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
该文件包含两个参数,即
monthNames
和
dayNames
。每个参数包含一个逗号分隔列表,该列表被分析为字符串。可以使用
String.split()
方法将此列表拆分为数组。
不要将保留字或语言构造作为外部数据文件中的变量名称,因为这样做会使代码的读取和调试变得更困难。
加载数据后,将调度
complete
事件,随后就可以在 URLLoader 的
data
属性中使用外部文档的内容,如以下代码所示:
function completeHandler(event)
{
var loader2 = URLLoader(event.target);
air.trace(loader2.data);
}
如果远程文档包含名称-值对,则可以通过传入加载文件的内容,使用 URLVariables 类来分析数据,如下所示:
function completeHandler(event)
{
var loader2 = event.target;
var variables = new air.URLVariables(loader2.data);
air.trace(variables.dayNames);
}
外部文件中的各个名称-值对都创建为 URLVariables 对象中的一个属性。在上面的代码范例中,变量对象中的各个属性都被视为字符串。如果名称-值对的值是一个项目列表,则可以通过调用
String.split()
方法将字符串转换为数组,如下所示:
var dayNameArray = variables.dayNames.split(",");
如果从外部文本文件加载数值数据,可使用顶级函数(如
parseInt()
、
parseFloat()
和
Number()
)将这些值转换为数值。
无需将远程文件的内容作为字符串加载和新建 URLVariables 对象,您可以将
URLLoader.dataFormat
属性设置为在 URLLoaderDataFormat 类中找到的静态属性之一。
URLLoader.dataFormat
属性有以下三个可能的值:
-
URLLoaderDataFormat.BINARY
—
URLLoader.data
属性包含 ByteArray 对象中存储的二进制数据。
-
URLLoaderDataFormat.TEXT
—
URLLoader.data
属性包含 String 对象中的文本。
-
URLLoaderDataFormat.VARIABLES
—
URLLoader.data
属性包含 URLVariables 对象中存储的 URL 编码的变量。
下面的代码演示了如何通过将
URLLoader.dataFormat
属性设置为
URLLoaderDataFormat.VARIABLES
,从而自动将加载的数据分析为 URLVariables 对象:
var request = new air.URLRequest("http://www.example.com/params.txt");
var variables = new air.URLLoader();
variables.dataFormat = air.URLLoaderDataFormat.VARIABLES;
variables.addEventListener(air.Event.COMPLETE, completeHandler);
try
{
variables.load(request);
}
catch (error)
{
air.trace("Unable to load URL: " + error);
}
function completeHandler(event)
{
var loader = event.target;
air.trace(loader.data.dayNames);
}
注:
URLLoader.dataFormat
的默认值为
URLLoaderDataFormat.TEXT
。
如以下示例所示,从外部文件加载 XML 与加载 URLVariables 相同。可以创建 URLRequest 实例和 URLLoader 实例,然后使用它们下载远程 XML 文档。文件完全下载后,将调度
complete
事件,
trace()
函数将该文件的内容输出到命令行。
var request = new air.URLRequest("http://www.example.com/data.xml");
var loader = new air.URLLoader();
loader.addEventListener(air.Event.COMPLETE, completeHandler);
loader.load(request);
function completeHandler(event)
{
var dataXML = event.target.data;
air.trace(dataXML);
}