angularjs路由如何禁止缓存?

JavaScript010

angularjs路由如何禁止缓存?,第1张

angular默认的模板加载都会被缓存起来,使用的缓存服务是$tempalteCache,发送模板请求的服务是$templateRequest,可以有两种方案:

1.每次发送$http请求模板完成后,调用$tempalteCache.remove(url)或removeAll清除所有模板缓存;

2.使用$provide.decorator改写原生的$templateRequest,禁掉缓存,$templateRequest的源码,可以看到它默认使用$tempalteCache作为缓存,可以去掉它。

我们先看看这个问题是怎么引起来的:

如果没有进行额外设置的话,如果请求的地址和参数及参数的值完全一样,就会发生jquery ajax使用缓存的情况。

jquery ajax使用缓存的解决方案:

1.在请求的url后面加上一个随机参数(***.do?random=Math.random)这不失为一个好方法,缺点就是在所有的jquery ajax请求的地方都要加上这个随机参数,新项目还行,老项目的花,这是个巨大的工作量。

2.给jquery ajax请求设置禁用缓存的全局设置

我们都知道在jquery ajax的的方法中有个cache参数,如果设置为false,那么就不进行缓存。这么怎么设置全局的jquery ajax cache参数呢?

答案就是ajaxSetup() 方法,该方法可以为所有的ajax请求统一设置默认参数。那么可以设置如下代码:

$(function(){

$.ajaxSetup ({

cache: false //关闭AJAX缓存

})

})

最后如果没有common.js文件(所有页面都调用的JS文件),那么把这段代码放到jquery库文件里面吧。

解答完毕!

禁用客户端缓存

HTM网页

<METAHTTP-EQUIV="pragma"

CONTENT="no-cache">

<METAHTTP-EQUIV="Cache-Control"

CONTENT="no-cache,must-revalidate">

<META

HTTP-EQUIV="expires"CONTENT="Wed,26Feb199708:21:57

GMT">

ASP网页

<%

Response.Expires=

-1

Response.ExpiresAbsolute=Now()-1

Response.cachecontrol="no-cache"

%>

PHP网页

header("Expires:Mon,26Jul199705:00:00GMT")

header("Cache-Control:no-cache,must-revalidate")

header("Pragma:no-cache")

JSP

response.setHeader("Pragma","No-Cache")

response.setHeader("Cache-Control","No-Cache")

response.setDateHeader("Expires",0)

C#中禁止cache的方法!

Response.Buffer=true

Response.ExpiresAbsolute=System.DateTime.Now.AddSeconds(-1)

Response.Expires=0

Response.CacheControl="no-cache"

加入

<MEATHTTP-EQUIV="Pragma"

CONTENT="no-cache">

不缓存。

一、Expires(期限)

说明:可以用于设定网页的到期时间。一旦网页过期,必须到服务器上重新调阅。

用法:<METAHTTP-EQUIV="expires"CONTENT="Wed,26Feb1997

08:21:57GMT">

注意:必须使用GMT的时间格式。

二、Pragma(cache模式)

说明:禁止浏览器从本地机的缓存中调阅页面内容。

用法:<META

HTTP-EQUIV="Pragma"CONTENT="no-cache">

注意:这样设定,访问者将无法脱机浏览。

三、脚本实现

<%

response.expires=0

response.expiresabsolute=now()

-1

response.addHeader"pragma","no-cache"

response.addHeader"cache-control","private"

Response.cachecontrol="no-cache"

%>

IE浏览器访问一个网页的时候,首先会到临时文件夹中去寻找和这个网页相关的各个文件(如各种图片)。如果在临时文件夹中找到了一些文件,那么浏览器就会使用这些临时文件夹中的文件,而不去服务器下载这些文件。

不幸的是,我的服务器上的文件是经常变化的,如果IE优先考虑临时文件夹中的文件,那么就不能反映出我服务器上的变化。

现在有两个解决办法,但都有缺陷:

一是使用网页的自刷新,但是刷新速度快的话会有闪烁,不符合我其他方面的要求。

二是在IE设置中设成“每次访问此页时检查”。此时IE不考虑临时文件夹中的内容,直接从服务下载各个文件。但是这种办法需要用户进行设置,对用户来说有点麻烦。而且这样的设置会影响用户访问其他网站的速度。