Unexpected Caching of AJAX results in IE8

前端 未结 10 2032
走了就别回头了
走了就别回头了 2020-11-28 01:59

I\'m having a serious issue with Internet Explorer caching results from a JQuery Ajax request.

I have header on my web page that gets updated every time a user navig

相关标签:
10条回答
  • 2020-11-28 02:24

    this is what i do for ajax calls:

    var url = "/mypage.aspx";
    // my other vars i want to add go here
    url = url + "&sid=" + Math.random();
    // make ajax call
    

    it works pretty well for me.

    0 讨论(0)
  • 2020-11-28 02:25

    Just wrote a blog on this exact issue only using ExtJS (http://thecodeabode.blogspot.com/2010/10/cache-busting-ajax-requests-in-ie.html )

    The problem was as I was using a specific url rewriting format I couldn't use conventional query string params (?param=value), so I had write the cache busting parameter as a posted variable instead..... I would have thought that using POST variables are a bit safer that GET, simply because a lot of MVC frameworks use the pattern

    protocol://host/controller/action/param1/param2

    and so the mapping of variable name to value is lost, and params are simply stacked... so when using a GET cache buster parameter

    i.e. protocol://host/controller/action/param1/param2/no_cache122300201

    no_cache122300201 can be mistaken for a $param3 parameter which could have a default value

    i.e.

    public function action($param1, $param2, $param3 = "default value") { //..// }

    no chance of that happening with POSTED cache busters

    0 讨论(0)
  • 2020-11-28 02:28

    As marr75 mentioned, GET's are cached.

    There are a couple of ways to combat this. Aside from modifying the response header, you can also append a randomly generated query string variable to the end of the targeted URL. This way, IE will think it is a different URL each time it is requested.

    There are multiple ways to do this (such as using Math.random(), a variation on the date, etc).

    Here's one way you can do it:

    var oDate = new Date();
    var sURL = "/game/getpuzzleinfo?randomSeed=" + oDate.getMilliseconds();
    $.get(sURL, null, function(data, status) {
        // your work
    });
    
    0 讨论(0)
  • 2020-11-28 02:29

    If you are calling ashx page you can also disable caching on the server with the following code:

    context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
    context.Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    
    0 讨论(0)
  • 2020-11-28 02:29

    NickFitz gives a good answer, but you'll need to turn the caching off in IE9 as well. In order to target just IE8 and IE9 you could do this;

    <!--[if lte IE 9]>
    <script>
        $.ajaxSetup({
            cache: false
        });
    </script>
    <![endif]-->
    
    0 讨论(0)
  • 2020-11-28 02:30

    The answers here are very helpful for those who use jQuery or for some reason directly use the xmlHttpRequest object...

    If you're using the auto-generated Microsoft service proxy its not as simple to solve.

    The trick is to use Sys.Net.WebRequestManager.add_invokingRequest method in the event handler change the request url:

    networkRequestEventArgs._webRequest._url = networkRequestEventArgs._webRequest._url + '&nocache=' + new Date().getMilliseconds(); 
    

    I've blogged about this: http://yoavniran.wordpress.com/2010/04/27/ie-caching-ajax-results-how-to-fix/

    0 讨论(0)
提交回复
热议问题