private var csv:URLLoader = new URLLoader();
private var array:Array = new Array();
private var urlr:URLRequest = new URLRequest();
public function loadRecipe(path:String):void
{
try
{
csv.dataFormat = URLLoaderDataFormat.TEXT;
urlr = new URLRequest(path);
csv.addEventListener(Event.COMPLETE, finishRecipe);
csv.load(urlr);
}
catch (e:SecurityErrorEvent)
{
trace("1");
}
catch (e:IOErrorEvent)
{
trace("2");
}
}
public function finishRecipe(e:Event):void
{
var csvString:String = csv.data as String;
array = csvString.split(",");
}
我正在使用的代码位于上面。我无法触发完成事件,也就是说,我的数组从未被填充。谁能告诉我为什么?
编辑: 我进行了更改以摆脱所有弱引用并检查错误。我没有收到任何错误。
最佳答案
这些年来我经常遇到这个错误。当某些浏览器(FireFox、Chrome)从缓存而不是网络检索文件时,加载程序将调度 PROGRESS 事件,但永远不会 COMPLETE。
尝试清除浏览器缓存,看看下次文件加载是否正确。如果是这样,您可以执行以下两种操作之一作为解决方法:
通过在请求网址末尾添加随机字符串来破坏缓存。
urlr = new URLRequest(path + "?cachebust=" + Math.floor(100000+900000*Math.random()));
这很容易编码,但有明显的缺点,会强制不必要的重新加载。
监听 COMPLETE 和 PROGRESS 事件。在 PROGRESS 处理程序中,检查 bytesLoaded 是否与 bytesTotal 匹配。如果是这样,请删除所有处理程序并继续,就像它是一个完整的事件一样。
... somewhere in your code ... loader.addEventListener(Event.COMPLETE, handleComplete); loader.addEventListener(ProgressEvent.PROGRESS, handleProgress); ... somewhere else private function handleProgress(evt:ProgressEvent):void { checkLoadComplete(); } private function handleComplete(evt:Event):void { checkLoadComplete(); } private function checkLoadComplete():void { if(loader.bytesTotal > 0 && loader.bytesLoaded == loader.bytesTotal) { loader.removeEventListener(Event.COMPLETE, handleComplete); loader.removeEventListener(ProgressEvent.PROGRESS, handleProgress); ... your code here } }
关于events - URLLoader Event.Complete 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14386995/