flash as3,使用 URLLoader 加载外部文件

最近在给一个朋友帮忙,做了一个 flash 整站,站内的文章都采用 web service 方式获得,也就是用 URLLoader 进行加载,但是在加载的过程中总会出现各种异常,造成加载失败,在网上搜索了很多内容,却没找到如何进行重加载的方法,或者是我没发现吧。。。。

 

没办法,只好自己想办法解决了。。。。

 

由于 URLLoader 基本上没什么可以自定义的属性,为了能够确认 URLLoader 的状态,我的解决办法如下:

 

首先,定义两个变量

 

// 设置一个数组,用来描述正在加载中的外部文件 var xmlLoaderList:Array = new Array(); // 设置一个计数器,描述加载出错的文件数量 var xmlLoaderErr:int = 0;

 

然后,设置一个函数,用来进行加载外部文件

 

function getHttpFile(url){ var Loader:URLLoader = new URLLoader(); var Request:URLRequest = new URLRequest(url); // 设置事件监听:加载成功的处理 Loader.addEventListener(Event.COMPLETE, onComplete); // 设置事件监听:加载失败的处理 Loader.addEventListener(IOErrorEvent.IO_ERROR,onLoadXmlError); Loader.load(Request); // 将加载对象放入到数组中 xmlLoaderList.push({obj:Loader,stats:false,url:url}); }

 

因为 URLLoader 不能设置自定义的属性,并且,在事件捕捉后,也无法获得正在加载的文件到底是什么地址

 

所以,才将 URLLoader 对象放到数组中,并补充两个属性,加载状态 statse 和加载地址 url

 

再然后就是加载成功的处理

 

function onComplete(event:Event):void{ // 引用事件触发的 URLLoader 对象 var xLoader:URLLoader = event.target as URLLoader; // 遍历数组中的对象 for (i = 0 ; i < xmlLoaderList.length ; i ++){ // 匹配数组中URLLoader元素与事件触发对象 if (xLoader == xmlLoaderList[i].obj){ // 设置加载状态 stats 为真 xmlLoaderList[i].stats = true; } } // 按加载状态 stats 排序 xmlLoaderList.sortOn('stats') // 删除数组中最后一个元素,即加载成功的信息 xmlLoaderList.pop(); // 校验是否需要进行重加载 if ((xmlLoaderErr == xmlLoaderList.length)&&(xmlLoaderErr > 0)){ reloadXml(); } }

 

以及加载出错的处理

 

function onLoadXmlError(e:IOErrorEvent):void{ xmlLoaderErr ++; // 校验是否需要进行重加载 if ((xmlLoaderErr == xmlLoaderList.length)&&(xmlLoaderErr > 0)){ reloadXml(); } }

 

这样,当文件加载成功后,会将 xmlLoaderList 数组中相应的元素删除,而出错时,则 xmlLoaderErr 自动加一

 

当 xmlLoaderErr 的值与 xmlLoaderList 剩余的元素相同时,则表示剩余的元素都是加载失败的内容,需要进行重新加载

 

那么,最后就是重新加载的处理了

 

function reloadXml(){ // 清空 xmlLoaderErr 的数据 xmlLoaderErr = 0; // 设置一个临时数组,保存 xmlLoaderList 的数据 var arr:Array = new Array(); for (i = 0 ; i < xmlLoaderList.length ; i ++){ arr.push(xmlLoaderList[i]); } // 清空 xmlLoaderList 的数据 for (i = 0 ; i < arr.length ; i ++){ xmlLoaderList.pop(); } // 重新加载出错的外部文件 for (i = 0 ; i < arr.length ; i ++){ getHttpFile(arr[i].url); } }

 

主要是为了避免在调用 getHttpFile 时,xmlLoaderList 的数据自动增加,所以用了三次循环。。。。汗。。。。

 

懒的去优化了,到这里,加载出错的内容就可以自动重新加载了,目的也就达到了。

 

在实际应用中,可以把自己需要处理的内容,加到 onComplete 处理过程就,就完全满足自己的需要了。

你可能感兴趣的:(Web,优化,function,service,Flash,url)