Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

$.getJSON returning cached data in IE8

I'm playing around with ASP.net MVC and JQuery at the moment. I've come across behavour which doesn't seem to make sense.

I'm calling JQuery's $.getJSON function to populate some div's. The event is triggered on the $(document).ready event. This works perfectly.

There is a small AJAX.BeginForm which adds another value to be used when populating the divs. It calls the remote function correctly and upon success calls the original javascript function to repopulate the divs.

Here is the weird part: In FireFox and Chrome - Everything works. BUT In IE8 (Beta) this second call to the populate Div script (which calls the $.getJSON function) gets cached data and does not ask the server!

Hope this question makes sense: In a nut shell - Why is $.getJSON getting cached data? And why is it only effecting IE8?

like image 429
Andrew Harry Avatar asked Nov 05 '08 02:11

Andrew Harry


2 Answers

This is how it worked for me...

$.ajaxSetup({ cache: false }); $.getJSON("/MyQueryUrl",function(data,item) {      // do stuff with callback data      $.ajaxSetup({ cache: true });    }); 
like image 128
Jitesh Patil Avatar answered Sep 20 '22 03:09

Jitesh Patil


Just to let you know, Firefox and Chrome consider all Ajax request as non-cachable. IE (all versions) treat Ajax call just as other web request. That's why you see this behavior.
How to force IE to download data at each request:

  • As you said, use 'cache' or 'nocache' option in JQuery
  • Add a random parameter to the request (ugly, but works :))
  • On server side, set cachability (for example using an attribute, see below)

Code:

public class NoCacheAttribute : ActionFilterAttribute {     public override void OnActionExecuted(ActionExecutedContext context)     {         context.HttpContext.Response.Cache.SetCacheability(HttpCacheability.NoCache);     } } 
like image 27
Nico Avatar answered Sep 22 '22 03:09

Nico