解决ajax调用中ie的缓存问题

简介:
ajax请求调用的过程中发现的问题:后台请求是一个简单的.aspx文件,而这个页面又没有考虑过缓存的影响,使用ajax调试的时候发现有时候根本不走后台代码直接返回结果了,所以估计是受到浏览器缓存的影响。网上搜了一下,果然是缓存的问题:“ IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交。因此无法取到刚提交的数据或新的数据”。
解决方法大致有下面几种:
1、只改进服务器端
(1)后台是简单的.aspx文件,直接加上<%@ OutPutCache Location="None"%>即可。
(2)但是如果后台是.ashx文件通常在类里直接修改缓存设置。
        context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
2、只改进客户端
(1)利用加随机数或加时间戳改变请求地址
a、加随机数:var url='AjaxOperations.aspx?rdm='+Math.random()+'&action='+op;
b、加时间戳:var url='AjaxOperations.aspx?dtStamp='+new Date().getTime()+'&action='+op; 
这一种解决方案,只需要加个时间或随机数作为参数,服务器端不需要任何改动就可以达到目的。
(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方式)
或者 ajaxObj.sendGet(其他参数列表,...."If-Modified-Since","0"); (get方式)






本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2009/07/07/1517450.html,如需转载请自行联系原作者
目录
相关文章
|
缓存 前端开发 UED
Ajax请求如何避免缓存问题
当Ajax第一次发送请求后,会把请求的URL和返回的响应结果保存在缓存内,当下一次调用Ajax发送相同的请求时(URL完全相同,参数完全相同),浏览器就不会与服务器交互,而是直接从缓存中把数据取出来,这是为了提高页面的响应速度和用户体验,(服务端也会收到请求响应304)。
112 0
|
缓存 前端开发 JavaScript
学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求
学习AJAX必知必会(3)~自动重启工具nodemon、缓存问题、请求超时和网络异常、取消重复请求
119 0
|
缓存 前端开发
Ajax-11:解决IE缓存问题
Ajax-11:解决IE缓存问题
89 0
Ajax-11:解决IE缓存问题
|
Web App开发 JavaScript 前端开发
|
缓存 前端开发 JavaScript
|
JSON JavaScript 前端开发
|
JSON 前端开发 PHP
ecshop中ajax的调用原理
1:首先ecshop是如何定义ajax对象的。 ecshop中的ajax对象是在js/transport.js文件中定义的。里面是ajax对象文件。 声明了一个var Ajax = Transport;对象和一个方法Ajax.
903 0
|
前端开发
IE浏览器下,ajax访问不生效或返回“No Transport”的问题
版权声明:欢迎评论和转载,转载请注明来源。 https://blog.csdn.net/zy332719794/article/details/53283974 解决办法:在调用ajax方法之前加上jQuery.
994 0

相关产品

  • 云迁移中心