如何防止缓存.NET JSON源

时间:2011-06-09 18:37:08

标签: jquery .net json iis jsonp

我创建了一个简单的.aspx页面,它在数据库中查询一些实时数据,然后返回Content-Type application/json; charset=utf-8

的JSONP(或者最后一个类似JSONP的)源

这是输出的格式,或多或少:

jsonp1307643489579([
  ["12345","Text Here","99999","More Text Here","True","False","7/31","1"...],
  ["12345","Text Here","99999","More Text There",...]
]

然后是JQuery .getJSON调用:

var url = "myURL.aspx?id=123&callBack=?";
$.getJSON(url, null, function(msg) { etc etc.

除了以下情况外,一切正常。在我的开发环境和本地服务器上,每次都会重新生成新数据。但是在生产Web服务器上,数据会一直缓存,直到我回收IIS应用程序池(!)

我尝试了一些没有成功的事情。

1 / cache:ajaxSetup中的false不起作用。

2 /关闭了web.config中的输出缓存。

2a / OutputCache Location =“无”在aspx页面声明中没有这样做。

3 /在.getJSON(url)调用中添加了随机唯一查询字符串数据。看看我们如何为每个电话追加一个独特的回调参数,我想这无论如何都已经发生了。

我知道为什么我的Web服务器会持有这些缓存的应用程序/ JSON文件?

编辑:我正在查看实际的.aspx供稿,因为它们是从网络服务器上下载的,并且它们被缓存在那里。所以据我所知,这是一个Web服务器缓存问题,不一定是JQUERY缓存问题。

3 个答案:

答案 0 :(得分:10)

在进行任何getJSON来电之前,请使用:

jQuery.ajaxSetup({
   cache: false
});

昨天我和同样的问题争了半个小时。我不确定为什么手动添加随机查询字符串不起作用,但这解决了我的问题。在我添加上面的常规设置之前,缓存命中是完全随机的。

答案 1 :(得分:1)

要详细说明@ Stefan的答案,将cache设置为false会告诉jquery附加一个随机查询字符串以使请求唯一。

示例:myURL.aspx?id = 123& callBack =& _ = 13245897565132154878

答案 2 :(得分:0)

事实证明,确实是.ASPX服务器页面缓存了数据。对于所有关注客户端AJAX的东西,我忽略了显而易见的事情。

所以我在服务器端添加了一连串的预防措施(Response.ExpiresAbsolute,等等),它完成了这项工作。