今天做ajax读取页面的信息发现没有更新被ie缓存了。
一般情况下,WEB页面都会在Internet临时文件夹中有一个临时文件.
我在操作IE时会出现这种情况:
假如说有一个页面Page1.aspx,在我第一次访问后,它会在我的Internet临时文件夹里有一个Page1.aspx文件生成.之后,如果我改了Page1.aspx的数据后再次访问该页面,发现IE并没有对这个Page1.aspx的数据进行更新,反而打开的是我第一次访问的页面.为什么会这样,是因为IE自动(默认)调用了Internet临时文件夹里有一个Page1.aspx文件,而不是重新下载新的Page1.aspx.
怎样能让IE自动重新下载新的Page1.aspx呢?
一种方法是对Internet选项进行设置.
Internet选项-->常规-->Internet临时文件中"设置"-->每次访问此页时检查.
这种设置时最好同时删除临时文件.
这种方法是让客户自己设置自己的浏览器,如果客户忘记了设置,那么,新的页面总是下载不到本地.这时,客户会怎样认为呢?("肯定是程序的错!"其实也不是程序的错,但是用程序完全可以解决这个问题)
第二种方法:用程序自己来让页面自动下载.
这种方法实际上是让页面不保存到Internet临时文件夹中,每次访问页面都会让浏览器下载页面.
解决方法:
很多的时候,我们想ajax GET到的页面是最新的 可以在网页中加一些meta指令或利用asp php jsp 的 增加header的方法实行 很简单。 如果页面中用到了session cookie 这个方法就可能没用了 今天我找到一个很简单的办法 就是在请求url后面加一个没用的参数而且是随机的 例如请求 getuser.asp 可以用 XMLHttpRequest.的.open("GET","getusr.asp?"+Math.random(),true), 很简单吧 这样浏览器就不会取缓存中的数据了 呵呵
采用AJAX技术的时候 通常我们无刷新页面提交数据后 用同样的url去获取数据的时候会发现是以前的数据~那样就给client端带来假象了~~ 采用以下的方法可以取消缓存
htm网页
<metahttp-equiv="pragma"content="no-cache">
<metahttp-equiv="cache-control"content="no-cache,must-revalidate">
<metahttp-equiv="expires"content="wed,26feb199708:21:57gmt">
或者<metahttp-equiv="expires"content="0">
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.addHeader("pragma", "no-cache");
response.addHeader("cache-control", "no-cache,must-revalidate");
response.addHeader("expires", "0");
asp.net
只要在aspx.cs代码的Page_Load事件中加上
Context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
即可.