AJAX IE缓存问题

在IE浏览器中如果XMLHttpRequest提交的URL与历史一样,则会使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据。

1、改进服务器端
(1)后台是简单的.aspx文件,直接加上<%@ OutPutCache Location="None"%>即可。
(2)但是如果后台是.ashx文件通常在类里直接修改缓存设置。
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
2、改进客户端
(1)利用加随机数或加时间戳改变请求地址

  • a、加随机数:
    xhr.open("GET",'AjaxOperations.aspx?rdm='+Math.random());
  • b、加时间戳:
    xhr.open("GET",'AjaxOperations.aspx?rdm='+new Date().getTime());

      这一种解决方案,只需要加个时间或随机数作为参数,服务器端不需要任何改动就可以达到目的。

(2)前台异步调用设置 XMLHttpRequest对象的属性
       在XMLHttpRequest发送请求之前加上 XMLHttpRequest.setRequestHeader("If-Modified-Since","0"),个人认为这个才是“正道”。因为你不能明确哪些ajax请求是需要还是不需要缓存的(解决网站的性能瓶颈,利用有缓存的ajax居多),所以每次在发送请求的时候确认一下是否要缓存,相对于2中的第(1)条显然少写了一个url参数,而且服务器端(改进方法1)也不需要改变设置,但是对于已经封装好的ajax库,你可能已经不能在外面直接使用XMLHttpRequest对象了,通常的设置语法可能是将("If-Modified-Since","0")作为参数传递:ajaxObj.sendPost(其他参数列表,...."If-Modified-Since","0"); (post方式)

posted @ 2022-09-27 12:13  Lamb~  阅读(20)  评论(0编辑  收藏  举报