`
snake_hand
  • 浏览: 624814 次
社区版块
存档分类
最新评论

关于解决JQuery发送Ajax请求后,IE缓存数据不更新的问题

 
阅读更多

欢迎大家访问我的个人网站 萌萌的IT人

今天在做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的这个机制也是通过为请求地址添加不同的查询字符串后缀来实现的。

 

3
3
分享到:
评论
2 楼 MrLee23 2013-09-17  
日本人的代码也不过如此嘛,哈哈哈
1 楼 panpan2011 2013-09-17  
缓存问题解决。

相关推荐

    如何解决Ajax请求结果的缓存问题说明

    目录 一、问题重现 二、通过为URL地址添加后缀的方式解决问题 三、通过JQuery的Ajax设置解决问题 四、通过定制响应解决问题一、问题重现我们通过一个ASP.NET MVC应用来重现IE针对Ajax请求结果的缓存。在一个空ASP...

    IE下jquery ajax无法获得最新数据的问题解决(IE缓存)

    本文主要讨论的是一个常见的问题——在Internet Explorer (IE) 浏览器下,使用jQuery AJAX请求无法获取到最新数据,而是返回了缓存中的旧数据。这个问题在其他现代浏览器如Chrome中通常不会出现。 首先,我们要理解...

    jquery ajax多次请求数据时 不刷新问题的解决方法

    总结来说,当使用jQuery进行Ajax请求,尤其是需要频繁更新数据时,通过设置`cache: false`可以解决IE浏览器缓存问题,确保每次请求都从服务器获取最新的数据,避免因为浏览器缓存导致的数据不刷新问题。这个方法适用...

    解析jquery中的ajax缓存问题

    本文将详细解析在使用jQuery进行AJAX请求时,针对不同浏览器,特别是Firefox和Internet Explorer处理缓存的差异性,并提供相应的解决方案。 首先,需要了解的是,AJAX请求默认情况下可以被浏览器缓存。这通常意味着...

    浅析IE针对Ajax请求结果的缓存问题

    在默认情况下,Internet Explorer(特别是IE8及更早版本)会缓存Ajax请求的结果,这可能导致用户获取到的数据不是最新的,尤其是在需要实时更新数据的场景下。 一、问题重现 首先,我们创建了一个简单的ASP.NET MVC...

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

    例如,对于那些数据更新频率较低但请求量大的接口,可以考虑使用缓存以提高效率;而对于实时性要求高的数据,应避免缓存以确保数据的即时性。 最后,了解并掌握这些Ajax调用和浏览器缓存的交互机制,可以帮助开发者...

    IE9下Ajax无法刷新数据的缓存问题解决方法

    在设置了这个全局选项之后,所有使用jQuery发起的Ajax请求都将默认不使用缓存,可以有效解决IE9下的缓存问题,但这也会影响到其他的Ajax请求。 总之,当遇到IE9下Ajax无法刷新数据的缓存问题时,可以使用添加时间戳...

    IE兼容性问题的快速解决方法_ajax请求不发送到后台

    本文将详细讲解如何解决IE浏览器下AJAX请求不发送到后台的问题。 首先,我们需要理解这个问题的根本原因。IE浏览器有一种独特的缓存机制,它会缓存HTTP请求,以提高页面加载速度。对于AJAX请求,如果URL没有发生...

    IE9 IE8 ajax跨域问题的快速解决方法

    - **IE8的Ajax请求不刷新问题**:有时IE8在使用Ajax请求后不会刷新页面内容,可能需要设置正确的HTTP头信息,例如`Cache-Control: no-cache`和`Pragma: no-cache`,来防止缓存。 总之,解决IE9和IE8的Ajax跨域问题...

    ajax页面无刷新 IE下遭遇Ajax缓存导致数据不更新的问题

    然而,IE浏览器的缓存机制有时会导致Ajax请求的数据不更新,即当Ajax请求相同URL时,浏览器可能会从本地缓存中读取旧数据,而非向服务器发起新的请求。 IE浏览器的这种行为主要出现在GET请求中。由于GET请求的URL和...

    Ajax和jQuery学习笔记

    - **缓存问题**:使用IE浏览器并通过GET方式提交数据时,浏览器可能会缓存请求,导致重复请求时显示旧数据。 - **解决办法**: - 使用POST方式提交数据。 - 在请求地址后面加上一个随机数,防止缓存。 - 设置...

    Ajax,JQuery达内培训笔记

    1. **GET请求缓存问题**:IE浏览器可能缓存GET请求,导致数据不更新。解决方法包括: - 在URL中添加时间戳或其他唯一标识符。 - 使用POST请求替代。 2. **字符编码问题**: - 确保服务器端设置正确的编码格式,...

    ie发送ajax请求返回上一次结果的解决方法

    IE浏览器在发送AJAX请求时,存在一个特定的问题,即它只会建立一次请求,并将响应结果缓存起来。在后续请求中,只要URL和参数不变,IE浏览器会直接从缓存中读取数据而不是向服务器发起新的请求。这个问题对于GET请求...

Global site tag (gtag.js) - Google Analytics