加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 教程 > 正文

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");
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章