关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题
http://www.cnblogs.com/lys_013/archive/2013/08/07/3243435.html
今天在做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);
}
}
/** Ajaxリクエストを発信し、DBのレコード件数を取得する */
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后加上。
随机函数代码例:

// TERASOLUNAのカスタムJSPタグ(ts:formやts:linkなど)のURLの末尾に?r=xxxを付与するキャッシュ避け機能の代替
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的这个机制也是通过为请求地址添加不同的查询字符串后缀来实现的。
关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题的更多相关文章
- JQuery发送ajax请求不能用数组作为参数
JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){ var select ...
- jQuery发送ajax请求
利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...
- Jquery发送ajax请求以及datatype参数为text/JSON方式
Jquery发送ajax请求以及datatype参数为text/JSON方式 1.方式一:datatype:'text' 2.方式二:datatype:'JSON' 3.使用gson-1.5.jar包 ...
- 学习AJAX必知必会(4)~JQuery发送Ajax请求
一.JQuery发送Ajax请求 ■ 对于get和post请求,jQuery内部封装了Ajax请求的4个步骤和数据格式的设置 ■ 对于Ajax通用请求,jQuery内部封装了Ajax请求的4个步骤和数 ...
- jquery发送ajax请求返回数据格式
jquery向服务器发送一个ajax请求后,可以返回多种类型的数据格式,包括:html,xml,json,text等. 1.html格式的数据 "<div class='comment ...
- jQuery发送Ajax请求以及出现的问题
普通jQuery的Ajax请求代码如下: $.ajax({ type: 'POST', url: "http://xxx/yyy/zzz/sendVerifyCode", data ...
- IE9下JQuery发送ajax请求失效
最近在做项目的时候,测试PC端网页,在IE9下会失效,不能正常的发送POST请求,经过仔细的排查,发现是IE9下JQuery发送ajax存在跨域问题. 目前有两种解决方案: 解决方案一: 设置浏览 ...
- python测试开发django-50.jquery发送ajax请求(get)
前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...
- JQuery发送Ajax请求出现 500 Internal Server Error
ajax返回,readyState=4,status=500,chrome f12提示,提示服务器内部错误 我采用 http://q.cnblogs.com/q/69745/的解决办法根本不行,也不是 ...
随机推荐
- cocos2d-x3.1.1 step by step 学习笔记1----- 软件的安装与HelloWord
1:软件安装 系统:WIn7 软件:VS2012.cocosd-x3.1.1.python2.6.7.doxygen <1>首先安装VS2012,安装也是傻瓜式安装, <2>然 ...
- nginx+tomcat动静分离结构
本文采用另一种策略对动静分离进行演示,它的大致结构如图 2 所示. 图 2. 本文设计的动静分离结构 在本文中,我们将静态资源放在 A 主机的一个目录上,将动态程序放在 B 主机上,同时在 A 上安装 ...
- HDU 3157 Crazy Circuits(有源汇上下界最小流)
HDU 3157 Crazy Circuits 题目链接 题意:一个电路板,上面有N个接线柱(标号1~N),还有两个电源接线柱 + -.给出一些线路,每一个线路有一个下限值求一个能够让全部部件正常工作 ...
- android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)
写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载 zbarLib编译project project下载0积分 bug 在2.3的系统中Hol ...
- 设计模式 - 命令模式(command pattern) 多命令 具体解释
命令模式(command pattern) 多命令 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考命令模式: http://blog.csdn.ne ...
- JavaScript标准Selection操作
简介 术语 属性 方法 document.activeElement document.designMode = 'on'; 简介 selection是对当前激活选中区(即高亮文本)进行操作. 在非I ...
- SSH电力项目
第一步:创建测试表Elec_Text: create table Elec_Text(textID varchar(50) not null primary key,textName varchar( ...
- 《编写高质量代码—改善java程序的151个建议》知识整理一
1.用偶判断,不用奇判断 案例:在代码i%2==1?"奇数":"偶数" (java中的求余算法相当于:divided-divided/divisor*divis ...
- How to solve GM MDI cannot complete the installation
Dear Joy, I have a problem using GM MDI diagnostic tool. When I installed it on my laptop, the tool ...
- javascript中window.event事件用法详解
转自http://www.jb51.net/article/32564.htm描述 event代表事件的状态,例如触发event对象的元素.鼠标的位置及状态.按下的键等等. event对象只在事件发生 ...