IE下Ajax缓存问题的神速解决方法
发布时间:2023-09-15 14:55:30 所属栏目:教程 来源:
导读:折腾了半天,程序中使用jquery的load方法进行请求,很奇怪为啥第二次无法发送请求。百度了一把,谁知load是用get方式进行请求的,因此IE浏览器对
其进行缓存了。网上搜了很多解决方案,一大把,下面是我认为比较
其进行缓存了。网上搜了很多解决方案,一大把,下面是我认为比较
折腾了半天,程序中使用jquery的load方法进行请求,很奇怪为啥第二次无法发送请求。百度了一把,谁知load是用get方式进行请求的,因此IE浏览器对 其进行缓存了。网上搜了很多解决方案,一大把,下面是我认为比较全面的解决方案。主要分为客户端解决和服务端解决。 1.客户端解决方案 IE访问策略:Internet选项--浏览历史记录--设置-- Internet 临时文件的选项改为每次访问网页时也可以 1: 在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 例如这样:URL+"&"+"t="+Math.random();或者new Date(); 2: 在XMLHttpRequest发送请求之前加上XMLHttpRequest.setRequestHeader("If-Modified-Since","0") 一般情况下,这里的XMLHttpRequest不会直接使用 你应该可以找到这样的代码 XXXXX.send(YYYYYY); 那么,就把它变成 XXXXX.setRequestHeader("If-Modified-Since","0"); XXXXX.send(YYYYYY); 实践证明,两种方法都非常有效。 1、在服务端加 header("Cache-Control: no-cache, must-revalidate"); 2、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0"); 3、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache"); 4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了 5、第四种方法和第三种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); //推荐使用这种方式 6、用POST替代GET:不推荐 2.服务器端解决方案: 以Struts2为例: Struts2 Server端用法 Xml代码 代码如下: <package name="json-nocache" extends="json-default"> <interceptors> <interceptor name="cachingHeadersInterceptor" class="com.ssa.pct.web.interceptor.CachingHeaderInterceptor" /> <interceptor-stack name="defaultSecurityStack"> <interceptor-ref name="defaultStack" /> <interceptor-ref name="cachingHeadersInterceptor" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="defaultSecurityStack" /> </package> Java代码 代码如下: public class CachingHeaderInterceptor extends AbstractInterceptor { private static final long serialVersionUID = 1L; public String intercept(ActionInvocation invocation) throws Exception { ActionContext context = invocation.getInvocationContext(); HttpServletResponse response = (HttpServletResponse) context.get(StrutsStatics.HTTP_RESPONSE); if (response != null) { response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setHeader("Expires", "-1"); (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐