ajax的 IE cache 相关问题解决

运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因。


代码如下:

function verify() {
$.ajax({
//issue for IE cache; timestamp=" + new Date().getTime()
url:"checkGroupName?timestamp=" + new Date().getTime(),
async: true,
data:"groupName=" + $("#cn").val()+"&groupTypeForDetail="+$("#groupType").val()+"&prefix="+$("#p").val(),
dataType:"html",
success:function(data){
if(data==1){
$("#result").html("<font color='green'>Group name["+$("#p").val()+ $("#cn").val()+"]Valid</font>");
$("#email").val($("#p").val()+ $("#cn").val()+$("#emailHidden").val());
$('#subData').removeAttr("disabled");
}else if(data==2){
$("#result").html("<font color='red'>Group name["+$("#p").val()+ $("#cn").val()+ "]already existed.</font>");
$('#subData').attr('disabled',"true");
}else{
$("#result").html("<font color='red'>Group name can not be empty.</font>");
$('#subData').attr('disabled',"true");
}
}
});
}

原理
Firefox 每次 request 都会重新再回一次 server 取得最新的数据,但是 IE 就不一样了,它会 cache 住之前得到的数据,只有第一次 request 时会真正的去 server 读取数据,导致ajax数据不会随时间而更新….
解决方案(从网上收集的)
  1、在服务端加 header("Cache-Control: no-cache, must-revalidate"); 或者用下面的组合更好一些:


代码如下:

header("Expires: Sat, 1 Jan 2005 00:00:00 GMT");
header("Last-Modified: ".gmdate( "D, d M Y H:i:s")."GMT");
header("cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");

  2、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("If-Modified-Since","0");
  3、在ajax发送请求前加上 xmlHttpRequest.setRequestHeader("Cache-Control","no-cache");
  4、在 Ajax 的 URL 参数后加上 "?fresh=" + Math.random(); //当然这里参数 fresh 可以任意取了
  5、第四种方法和第三种类似,在 URL 参数后加上 "?timestamp=" + new Date().getTime(); //推荐使用这种方式,我用的就是这种,个人认为比较方便。
  6、用POST替代GET:不推荐

(0)

相关推荐

  • 发布三个ajax相关的函数,包括无刷新提交表单等

    几个月前,因为项目需求,我写了下面的三个ajax相关的函数.发布出来和大家分享.第一个是用来无刷新加载一段HTML第二个是把表单数据转换成一串请求字符串第三个是结合函数一和函数二的无刷新提交表单实现. 还有一点要提到的是,无刷新表单提交,还不能对文件上传进行处理,这个主要是因为浏览器的安全设置.目前无刷新的上传,一般是用iframe来实现的.关于这个,我们在google里搜索能找到很多. 网上虽然已经有很多优秀的ajax的类和函数了,但是或许我这几个函数对大家还有点用处,于是我就发布出来了.可以

  • js jquery ajax的几种用法总结(及优缺点介绍)

    这篇文章,是我不知道什么是ajax到熟练运用ajax的一个历程. 一,最原始的方式来运用ajax 复制代码 代码如下: <SCRIPT language=javascript>var xmlHttp; function createXMLHttpRequest() { if (window.ActiveXObject) {xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");}else if (window.XMLHttpRequ

  • IIS里的AJAX相关的设置

    今天在IIS里发现一个 保持 HTTP 连接 的选项 说明如下 启用保持 HTTP 连接 大多数 Web 浏览器都要求服务器对多个请求保持连接打开状态,这称为"保持 HTTP 连接".保持连接是一个 HTTP 规范,能够显著增强服务器性能.如果没有它,浏览器将不得不对包含多个元素(如图形)的网页发出多个连接请求.可能需要为每个元素都生成一个连接.这些额外的请求和连接需要额外的服务器活动和资源,这将降低服务器的效率,还会使浏览器速度变慢并且响应不灵敏,特别是对高滞后时间(慢)连接更是如此

  • 浅谈Ajax相关及其优缺点

    AJAX,即Asynchronous Javascript And XML,可实现无刷新状态更新页面和异步提交 优点: 不需要插件支持 用户体验极佳 提升Web程序性能 减轻服务器和宽带的负担 缺点: 前进后退按钮被破坏 搜索引擎的支持不够 开发调试工具缺乏 同步和异步 同步:也就是必须一件一件事做,等前一件做完了才能做下一件事 异步:不需要等到前一件事做完,可多事同做 JQuery对AJAX进行了三层封装 最底层:封装了基础Ajax一些操作: 全局方法:$.ajax() 提交的数据在data中

  • ajax上传时参数提交不更新等相关问题

    先前,我从网上下载了一个jQuery的Ajax上传插件,网页的左侧是上传分类,想要实现的一个功能是如此这样的:我本来是打算在服务端根据上传分类建立不同的文件夹来保存文件的,因此这个就需要传一个上传分类参数给后台.这些上传分类是从数据库读出,用repeater生成的.当点击其中一个分类时就给他设置一个样式,并且将这个分类的名字保存到一个变量uploadCatlog中.我可以取到分类并传给后台,但是很奇怪的是只有第一次是正确的,以后的每次参数都不更新.其实在上传插件的onComplete回调函数中也

  • jquery $.ajax相关用法分享

    复制代码 代码如下: $.ajax({ type: "GET", url: "Services/EFService.svc/Members", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", success: function (data) { // Play with returned data i

  • ajax的 IE cache 相关问题解决

    运用Ajax做了一个名字检验,第一次是有效的,但是提交过后,再检验一次,结果就不对了,是由于IE的cache的原因. 复制代码 代码如下: function verify() { $.ajax({ //issue for IE cache; timestamp=" + new Date().getTime() url:"checkGroupName?timestamp=" + new Date().getTime(), async: true, data:"grou

  • ajax调用中ie缓存问题解决方法

    本文实例分析了ajax调用中ie缓存问题解决方法.分享给大家供大家参考,具体如下: ajax请求调用的过程中发现的问题:后台请求是一个简单的.aspx文件,而这个页面又没有考虑过缓存的影响,使用ajax调试的时候发现有时候根本不走后台代码直接返回结果了,所以估计是受到浏览器缓存的影响.网上搜了一下,果然是缓存的问题:"IE中如果XMLHttpRequest提交的URL与历史一样则使用缓存,根本不向服务器端提交.因此无法取到刚提交的数据或新的数据". 解决方法大致有下面几种: 1.只改进

  • JS Ajax请求会话过期处理问题解决方法分析

    本文实例讲述了JS Ajax请求会话过期处理问题解决方法.分享给大家供大家参考,具体如下: 对于页面来说,处理session过期比较简单,一般只需在过滤器里面判断session用户是否存在,不存在则跳转页面到登陆页即可. 对于Ajax请求来说,这个办法则无效,只能获取到登录页的html代码.原因在于Ajax请求是XMLHTTPRequest对象发起的而不是浏览器,而服务器返回的信息接收者也是XMLHTTPRequest,非浏览器. 解决办法: 服务器端 可在返回的ResponseHeader里添

  • JQuery发送ajax请求时中文乱码问题解决

    这篇文章主要介绍了JQuery发送ajax请求时中文乱码问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 先排除项目故障: 1.web.xml中是否配置了字符拦截器 <filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter

  • MySQL 表空间碎片的概念及相关问题解决

    背景 经常使用 MySQL 的话,会发现 MySQL 数据文件的磁盘空间一般会不停的增长,而且有时候删了数据或者插入一批数据的时候,磁盘空间有时候还会毫无变化.引发这个其妙现象的就是 MySQL 的表空间碎片. 什么是表空间碎片? 表空间碎片指的是表空间中存在碎片,形象一点来比喻的话,就像是一张 A4 纸,"表空间碎片"就像是把这张 A4 纸撕碎,再重新拼起来,各个碎片之间都会有一些缝隙存在,这些缝隙就是"表空间碎片".重新拼起来的碎片实际上会比完整的 A4 纸大上

  • Spring Cache相关知识总结

    简介 Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.CacheManager 接口来统一不同的缓存技术: 并支持使用 JCache ( JSR-107 )注解简化我们开发: Cache 接口为缓存的组件规范定义,包含缓存的各种操作集合: Cache 接 口 下 Spring 提 供 了 各 种 xxxCache 的 实 现 : 如 RedisCache , EhCacheCache ,

  • Ajax中浏览器的缓存问题解决方法

    每次清除缓存后,就会得到一个新的数据,所以归根到底就是浏览器缓存问题.纠结了很久,终于解决了,在这里总结一下. 我们都知道ajax能提高页面载入的速度主要的原因是通过ajax减少了重复数据的载入,也就是说在载入数据的同时将数据缓存到内存中,一旦数据被加载其中,只要我们没有刷新页面,这些数据就会一直被缓存在内存中,当我们提交 的URL与历史的URL一致时,就不需要提交给服务器,也就是不需要从服务器上面去获取数据,虽然这样降低了服务器的负载提高了用户的体验,但是我们不能获取最新的数据.为了保证我们读

  • MySQL Threads_running飙升与慢查询的相关问题解决

    背景 年前本应该是回顾一年工作和收尾的阶段,奈何各种促销,活动都等着春节,因此也遇到了不少的问题,回顾了一下最近遇到的问题,发现有好几个问题比较类似,正好整理一下,作为年前收尾的案例吧.表现上都是数据库假死,无响应,发生的场景有较高的业务压力到来时,也有业务正常运行的时候,突然就出现问题了. 问题描述 由于腾讯云数据库 MySQL 本身是有故障检测和高可用机制的,这几例问题发生的时候,从用户反馈的问题出现的时间点到实际介入排查的时候已经有好几分钟了,但是并没有触发高可用切换,说明这个问题可能并不

  • Apache的status相关问题解决办法

    LNMPA中Apache的/root/lnmpa status问题解决方法 高手请无视,小白可借鉴. 问题描述: LNMP0.7升级到LNMPA后 运行命令 /root/lnmpa status Apache的status一项会出现错误提示: /etc/init.d/httpd: line 112: lynx: command not found 或者 Error 403 Access forbidden! 解决方法: 出现lynx: command not found错误提示的需要完成Step

  • asp.net中mvc使用ajax提交参数的匹配问题解决探讨

    想到在asp.net的mvc中如果使用ajax向服务端传递参数时如果参数是一个类或者是个数组(或List集合)以及更复杂的对象时,服务端总是会发生取不到值的情况,当然网上也有很多解决的例子,但都是在服务端想办法来解决的(比如将json转换为字符串,再在服务端反序列化为一个对象),为何不能在客户端就把这个问题搞定. 其实问题没那么复杂,那是因为在jquery提交Array的数据时,提交的时候始终会在名称后面加上"[]", 问题就出在这里.另外在服务端对数组和内嵌的js对象进行解析时,需要

随机推荐