我创建了一个简单的.aspx页面,它在数据库中查询一些实时数据,然后返回Content-Type application/json; charset=utf-8
这是输出的格式,或多或少:
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缓存问题。
答案 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,等等),它完成了这项工作。