0

我正在尝试将一个 txt 变量文件加载到我的 AS3 项目中。我遇到的问题似乎归结为 txt 文件(已预先格式化且无法更改)是使用双符号格式化的......例如

&name=mark&
&address=这里&
&tel=12345&

我正在使用以下代码加载 txt 文件

myLoader.addEventListener(Event.COMPLETE, onLoaded, false, 0, true);
myLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
urlRqSend = new URLRequest(addressToTxt.txt);

public function onLoaded(e:Event):void {
trace(myLoader.data);
}

使用 URLLoaderDataFormat.VARIABLES 会产生以下错误:

Error: Error #2101: The String passed to URLVariables.decode() must be a URL-encoded query string containing name/value pairs.

如果我使用 URLLoaderDataFormat.TEXT 我可以成功加载数据,但我不能(或不知道如何)访问变量。

请问有人对此有任何想法或解决方法吗?

谢谢,

标记

4

2 回答 2

3

我前段时间遇到过这样的问题。我建议您首先加载为文本,删除那些换行符,额外的&符号并手动解析:

var textVariables:String;
var objectVariables:Object = new Object();
...
myLoader.addEventListener(Event.COMPLETE, onLoaded, false, 0, true);
myLoader.dataFormat = URLLoaderDataFormat.TEXT;
urlRqSend = new URLRequest(addressToTxt.txt);

public function onLoaded(e:Event):void {
    textVariables = myLoader.data;
    textVariables = textVariables.split("\n").join("").split("\r").join(""); // removing line breaks
    textVariables = textVariables.split("&&").join("&"); // removing extra amphersands

    var params:Array = textVariables.split('&');

    for(var i:int=0, index=-1; i < params.length; i++)
    {
        var keyValuePair:String = params[i];
        if((index = keyValuePair.indexOf("=")) > 0)
        {
             var key:String = keyValuePair.substring(0,index);
             var value:String = keyValuePair.substring(index+1);
             objectVariables[key] = value;
             trace("[", key ,"] = ", value);
        }
    } 

}

我直接在这里写了那个代码,我这里没有任何 AS3 编辑器,所以,也许你会发现错误。

于 2012-06-14T16:26:43.897 回答
2

如果您在 String 中有数据并且它的结构与您编写的一样,您可以采取一种解决方法:

dataInString = dataInString.split("\n").join("").split("\r").join(""); // removing EOL
dataInString = dataInString.slice(0,-1); // removing last "&"
dataInString = dataInString.slice(0,1); // removing first "&"

var array:Array = dataInString.split("&&");
var myVariables:Object = new Object();

for each(var item:String in array) {
    var pair:Array = item.split("=");
    myVariables[pair[0]] = pair[1];
}

那应该使您成为具有适当变量的对象。

于 2012-06-14T16:26:37.053 回答