这里不讨论服务器端做相关控制禁止缓存,只考虑flash端做相关控制来禁止缓存。
以往的解决方法就是在url后面加上个随机数或者当前时间来保证请求地址的唯一性。
如:
new URLRequest("http://127.0.0.1/1.txt?nocache=" + new Date().getTime());
as3中有个类URLRequestHeader,可以通过它向URLRequest添加http头信息。
文档里以及网络上也有通过此禁止缓存的说明,如
request.requestHeaders.push(new URLRequestHeader("pragma", "no-cache");
但是很不幸,经过测试,无效,照常缓存,而且我修改了1.txt的内容再去请求依然读取的是缓存中老的内容。
测试代码如下:
getbtn.addEventListener(MouseEvent.CLICK, onget);
function onget(evt:MouseEvent):void
{
var header:URLRequestHeader = new URLRequestHeader("pragma", "no-cache");
//var header:URLRequestHeader = new URLRequestHeader("Cache-Control", "no-store, no-cache, must-revalidate");
var req:URLRequest = new URLRequest("http://127.0.0.1/1.txt");
req.requestHeaders.push(header);
var loader:URLLoader = new URLLoader(req);
loader.addEventListener(Event.COMPLETE, oncom);
}
function oncom(evt:Event):void
{
txt.appendText((evt.target as URLLoader).data + "n");
}
测试环境:ie8、flash cs3、flashplayer9。
看来还是老老实实用随机保证唯一url把。如果你有好的方法也请告知。
ps:
如果有这么一个需求就是:先刷最新的服务器数据,刷不到(譬如服务器当掉了)时再读缓存该作何处理呢?
思路很简单,在loader加载带随机数url的error事件里load不带随机的url。