今天在做ajax页面无刷新请求后台服务器数据的时候,IE下遭遇Ajax缓存,FF和Chrome均正常,因为刚开始并不知道IE有这个坏毛病,折腾好久,终于解决问题。
在默认情况下,IE会针对请求地址缓存Ajax请求的结果。换句话说,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端。在某些情况下,这种默认的缓存机制并不是我们希望的(比如获取实时数据)。
在IE下用Ajax请求某一页面,通常会因为缓存的原因而返回上一次的结果,造成混乱(比如说多次请求却没有响应)。
window.setInterval(realtimeHandle,3000);
function realtimeHandle(){
var tempCounter = getDbCounter();
if(dbCounter != tempCounter && tempCounter != undefined){
dbCounter = tempCounter;
alert("Now Count = " + dbCounter);
}
}
function getDbCounter(){
var counter;
$.ajaxSetup({
async:false
// Disable caching of AJAX responses */
//cache: false
});
$.get(
"RealtimeHandleAjaxAction.do",
//"RealtimeHandleAjaxAction.do?t=" + new Date().toTimeString(),
//"RealtimeHandleAjaxAction.do" + getRandomString(),
function(data){
counter = data.dbChangeCounter;
},
dataType = "json"
);
return counter;
}
[即get方式时,获取数据,因发送参数和地址都一致,故IE浏览 器会从缓存中取,而不会去请求服务器端,而post方式因为参数的不同,不会产生这个问题]
而FF和Chrome下不会出现这种情况。
为了不受缓存影响,解决方法:
一、改变IE访问策略
Internet选项--浏览历史记录--设置-- Internet 临时文件的选项改为每次访问网页时也可以
二、通过为URL地址添加后缀
在AJAX请求的页面后加个随机函数,例如我们可以使用随机时间函数。在javascript发送的URL后加上。
随机函数代码例:
function getRandomString() {
var randomString = "?r=";
for ( var i = 0; i < 20; i++) {
randomString += Math.floor(Math.random() * 10);
}
return randomString;
}
如这样:
URL+"&"+"t="+Math.random();//或者new Date();
"?timestamp=" + new Date().getTime();
三、改变jQuery的Ajax设置
另外我们还可以这样设置:
$.ajaxSetup({
cache:false
})
实际上jQuery的这个机制也是通过为请求地址添加不同的查询字符串后缀来实现的。
分享到:
相关推荐
现在我要在浏览器里读取缓存,因为ajax请求的数据很大,请求一次就够了。但是问题来了,在FF里面,是没有ajax缓存的,也就是每次都会触发ajax请求,这点和IE不一样。所以在这里就得注意,做个判断,阻止触发ajax事件...
今天修改一个bug,利用ajax查询数据,在谷歌浏览器下可以获取到最新数据,而在IE中获得是旧数据,无法获得最新的数据,经查资料,才发现时IE缓存再作怪。 发现此ajax请求用的get方式,每次请求的URL一模一样,IE浏览...
目录 一、问题重现 二、通过为URL地址添加后缀的方式解决问题 三、通过JQuery的Ajax设置解决问题 四、通过定制响应解决问题一、问题重现我们通过一个ASP.NET MVC应用来重现IE针对Ajax请求结果的缓存。在一个空ASP...
换句话说,在缓存过期之前,针对相同地址发起的多个Ajax请求,只有第一次会真正发送到服务端。在某些情况下,这种默认的缓存机制并不是我们希望的(比如获取实时数据),这篇文章就来简单地讨论这个问题,以及介绍几...
jquery的ajax在频繁请求数据,或者重复请求数据的时候出现了一个情况,那就是非ie浏览器正常,ie浏览器会设置缓存,导致第二次请求的时候不会刷新,系统报304 not modify, 解决方案: jquery的ajax方法提供配置...
相信很多小伙伴会遇到这种问题,用ajax做异步请求的时候,在IE浏览器下,并没有发送出去。但是相关程序确实执行了。为什么呢? 原来这是IE缓存方式的原因,所以呢,用下边的解决方案吧。 1.在请求的URL后边加上...
折腾了半天,程序中使用jquery的load方法进行请求,很奇怪为啥第...1: 在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 例如这样:URL+”&”+”t=”+Math.rando
原因是,在IE9下,进行Ajax请求时,若与之前请求相同,则不会再从浏览器获取数据,而是直接从本地获取,因此,在请求中加上时间戳,IE9便会认为是不同的请求,代码如下: $.getJSON(webApp + "/GetHccShowData.do?...
或者,你也可以指定jsonp的数据类型的回调函数,此函数会自动添加到Ajax请求中。 参数选项: async(true) 数据类型: Boolean 默认情况下,所有的请求都是异步发送的(默认为true)。 如果需要发送同步请求,...
1:在AJAX请求的页面后加个随机函数,我们可以使用随机时间函数 在javascript发送的URL后加上t=Math.random() 当然,不是直接把t=Math.random()拷贝到URL后面,应该像这样:URL+"&"+"t="+Math.random(); 2:在...
在$.get()的data后面加上新的随机参数,如{data: mydata, stamp: Math.random() },由于每次数据不一样,故请求后返回的数据不会缓存。 另外也可把$.get()改成$.post(),也可解决此问题。 一劳永逸的解决办法是设置...
如果没有特定查询的结果,它停止发送请求到服务器的其他查询。 Ajax的自动完成的jQuery的是麻省理工学院风格的许可证的条款下自由分发。这是目前支持的浏览器:IE 7 +,FF 2 +,Safari 3以上,谷歌9 +。 要求:...
8.19 取消AJAX异步请求 第9章 jQuery常用算法 9.1 jQuery遍历算法 9.2 jQuery祖先算法 9.3 jQuery后代算法 9.4 jQuery同胞算法 9.5 jQuery过滤算法 9.6 对一个列表进行排序 9.7 实现JSN对象数组的排序 9.8 将...
缓存问题: 何谓缓存问题?即当浏览器的输入内容相同,即请求的URL相同,这样浏览器就... 修改的代码: AJAXServer.java 缓存问题 代码如下: //缓存问题加的测试代码 输入内容不变IE、360次数不增加,firefox会增加 In
jQuery是业界最流行的JavaScript... 第四部分(第8~14章)详细分析了功能模块的源码实现,包括属性操作Attributes、事件系统Events、DOM遍历Traversing、DOM操作Manipulation、样式操作CSS、异步请求Ajax、动画Effects
.load方法没有设置 cache参数 默认true ,特别在IE浏览器下,一般的ajax的方法都是cache等于true的! 解决办法几个: 1.使用.ajax方法并设置 cache参数为false 代码如下: $.ajaxSetup ({ cache: false }); $(fucntion...
概述通过从光标的位置和移动来预测用户要打开的下一页(链接)并提前用ajax预读,在浏览器和服务器上提前生成缓存,加快页面移动。 $ . preload ( ) ;浏览器支持IE8+ 火狐Chrome合金苹果浏览器特征由于预加载ajax...
第1章 服务器控件概述及开发环境部署 .1 1.1 自定义服务器控件 1 1.2 服务器控件在软件开发过程中的作用 1 ...附录a .net 3.5技术教程系列——collection/asp.net ajax/ silverlight/jquery ...646
用隐藏的前景图片预加载,load事件判断时机,ie,chrome正常,ff请求了两次图片,图片未缓存; 换一种方式,不预载大图。改成直接在大图位置用覆盖层做“loading”后,chrome下表现为渐进加载图片,非chrome是直接...