我正在使用Adobe Flash Professional CS5创建一个网站
我正在尝试使用for循环中的URLLoader.load(path)读取文本文件的内容
路径每次迭代都会改变
当我从事件处理程序方法跟踪数据时,它只返回最后一个路径的文本文件的内容
看起来它只是在for完成循环之后才调用事件处理程序方法。
CODE:
var myData:URLLoader = new URLLoader();
myData.addEventListener(Event.COMPLETE, onLoaded);
function onLoaded(e:Event):void
{
trace(myData.data);
}
for (var o = 0; o < filesArray.length; o++)
{
for (var p = 0; p < filesArray[o].length; p++)
{
if (filesArray[o][p] == "category.txt")
{
path = "C:\\inetpub\\wwwroot\\" + filesArray[o][0] + "\\" + filesArray[o][p];
myData.load(new URLRequest(path));
trace(path);
}
}
}
这是输出:
C:\的Inetpub \ wwwroot的\ 0001 \ category.txt
C:\的Inetpub \ wwwroot的\ 0002 \ category.txt
C:\的Inetpub \ wwwroot的\ 0003 \ category.txt
C:\的Inetpub \ wwwroot的\ 0004 \ category.txt
C:\的Inetpub \ wwwroot的\ 0005 \ category.txt
犹太人
正如我所说,“Jewlery”是“C:\ inetpub \ wwwroot \ 0005 \ category.txt”的内容。
我尝试更改“onLoaded”方法以返回如下字符串:
function onLoaded(e:Event):String
{
return myData.data.toString();
}
这是在for循环中:
trace(myData.load(new URLRequest(path)));
然后我把它作为我的输出:
未定义
C:\的Inetpub \ wwwroot的\ 0001 \ category.txt
未定义
C:\的Inetpub \ wwwroot的\ 0002 \ category.txt
未定义
C:\的Inetpub \ wwwroot的\ 0003 \ category.txt
未定义
C:\的Inetpub \ wwwroot的\ 0004 \ category.txt
未定义
C:\ inetpub \ wwwroot \ 0005 \ category.txt
我也尝试将for循环转换为while循环,结果相同
它为什么表现得那样?
如果URLLoader.load方法在for循环中不能很好地工作,并且我对它无能为力,是否有另一种方法可以从文件中读取简单文本,比如FileStream或其他东西? (我是ActionScript的新手,来自C#)
提前致谢,
弗雷迪。
答案 0 :(得分:1)
本教程和示例代码涵盖了多个文件http://manewc.com/2008/09/02/preloading-multiple-image-demo/
中的预加载您的代码的问题可能是您只有一个URLLoader用于所有文件。您需要为每个文件创建一个新的加载对象。
答案 1 :(得分:1)
您没有给加载程序足够的时间来加载文本文件。你的计算机比网络速度快得多,所以甚至在加载器开始加载第一个文件之前,它就被迫加载第二个文件而不是下一个文件。最后一个是唯一有时间加载的。
在开始下一个之前,你必须等到每个实际完成加载。这不会在循环中工作,你需要将名称放在一个数组中,然后设置一个索引,初始化为第一个元素,开始加载然后在onLoaded事件中获取文件,增加索引并加载下一个文本文件,直到你完成。
是的,您只能为所有文件使用一个加载器。使用多个加载器的解决方案也可以工作,但不是因为你只是使用多个加载器而是因为它们中的每一个都不会与其他加载器中断。