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缓存数据不更新的问题的更多相关文章

  1. JQuery发送ajax请求不能用数组作为参数

    JQuery发送ajax请求不能用数组作为参数,否则会接收不到参数, 一.js代码如下: $('#delete-button').click(function(){        var select ...

  2. jQuery发送ajax请求

    利用jquery发送ajax请求的几个模板代码. $.ajax({ async : false, type: 'POST', dataType : "json", url: &qu ...

  3. Jquery发送ajax请求以及datatype参数为text/JSON方式

    Jquery发送ajax请求以及datatype参数为text/JSON方式 1.方式一:datatype:'text' 2.方式二:datatype:'JSON' 3.使用gson-1.5.jar包 ...

  4. 学习AJAX必知必会(4)~JQuery发送Ajax请求

    一.JQuery发送Ajax请求 ■ 对于get和post请求,jQuery内部封装了Ajax请求的4个步骤和数据格式的设置 ■ 对于Ajax通用请求,jQuery内部封装了Ajax请求的4个步骤和数 ...

  5. jquery发送ajax请求返回数据格式

    jquery向服务器发送一个ajax请求后,可以返回多种类型的数据格式,包括:html,xml,json,text等. 1.html格式的数据 "<div class='comment ...

  6. jQuery发送Ajax请求以及出现的问题

    普通jQuery的Ajax请求代码如下: $.ajax({ type: 'POST', url: "http://xxx/yyy/zzz/sendVerifyCode", data ...

  7. IE9下JQuery发送ajax请求失效

    最近在做项目的时候,测试PC端网页,在IE9下会失效,不能正常的发送POST请求,经过仔细的排查,发现是IE9下JQuery发送ajax存在跨域问题. 目前有两种解决方案:   解决方案一: 设置浏览 ...

  8. python测试开发django-50.jquery发送ajax请求(get)

    前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...

  9. JQuery发送Ajax请求出现 500 Internal Server Error

    ajax返回,readyState=4,status=500,chrome f12提示,提示服务器内部错误 我采用 http://q.cnblogs.com/q/69745/的解决办法根本不行,也不是 ...

随机推荐

  1. ProgressSeekBar

    ProgressSeekBar.rar

  2. 【源码分享】iOS-OC版五子棋

    五子棋是程序猿比较熟悉的一款小游戏,相信很多人大学时期就用多种语言写过五子棋小游戏,笔者工作闲暇之余,试着用OC实现了一下,在这里给大家分享一下.有不足之处,欢迎大家提供建议和指点! GitHub源码 ...

  3. iOS开发——高级技术&摇一摇功能的实现

    摇一摇功能的实现 在AppStore中多样化功能越来越多的被使用了,所以今天就开始介绍一些iOS开发的比较实用,但是我们接触的比较少的功能,我们先从摇一摇功能开始 在 UIResponder中存在这么 ...

  4. PAT 1006

    1006. Sign In and Sign Out (25) At the beginning of every day, the first person who signs in the com ...

  5. Beyond MySQL --Branching the popular database--转载

    原文:http://www.ibm.com/developerworks/library/os-beyondmysql/ Introduction MySQL is one of the most p ...

  6. JForum 2.19源码部署到eclipse

    前两天在研究免费论坛,通过oschina和相关的文档查阅,最终选择了jforum,首先他是java写的,其次方便二次开发,而且有些论坛的源码都已经不在维护了,jforum最近几个月还是有更新的,但是从 ...

  7. js中数组内置方法

    var arr = ['A','B','C','D']; length 计算数组的长度 arr.length//4 indexOf() 搜索一个指定的元素的位置 arr.indexOf('C');// ...

  8. 比较js中创建对象的几种方式

    1.工厂模式 function createObj(name, sex){ var obj = new Object(); obj.name = name; obj.sex = sex; obj.sa ...

  9. 关于Java基本数据类型

    Java的基本数据类型分为两大类:boolean类型和数字类型.而数值类型又分为整数类型和浮点类型.而整数类型中的字符类型也可以被单独对待. 总共是4类8种. byte类型整数在内存里占8位. -12 ...

  10. 关于快速排序的Java代码实现

    快速排序(Quicksort)是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别 ...