2011-06-09 99 views
4

进我创建了查询的一些现场数据的数据库,然后返回一个JSONP(或最后一个JSONP样)的Content-Type application/json; charset=utf-8如何防止.NET JSON被缓存

饲料这里简单的.aspx页面是输出的格式,或多或少:

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:false在ajaxSetup中不起作用。

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

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

3 /向.getJSON(url)调用添加随机唯一查询字符串数据。看到我们如何为每个呼叫添加一个唯一的回调参数,我想这已经发生了。

任何想法为什么我的Web服务器持有这些缓存的应用程序/ JSON文件?

编辑:我正在查看实际.aspx饲料,因为他们从Web服务器下来,他们被缓存在那里。所以据我的理解,这是一个Web服务器缓存问题,不一定是JQUERY缓存问题。

回答

0

原来,它的确是在.aspx服务器页面缓存中的数据。对于所有关注客户端AJAX的东西,我忽略了这些显而易见的东西。

因此,我在服务器端添加了一系列预防措施(Response.ExpiresAbsolute等),并完成了这项工作。

+0

回答你自己的问题是完全可以接受的。如果你找到自己的答案,其他人可以从你发现的东西中受益。如果您认为自己发现了一些难以正常发现或不在正常的东西,甚至可以发布问题*以回答自己的问题。 – 2011-09-11 19:39:22

+1

请你详细解释一下吗?一个回应告诉我你做了“等等”并没有真正的帮助 – spankmaster79 2015-03-02 13:09:02

10

在进行任何getJSON电话,使用此:

jQuery.ajaxSetup({ 
    cache: false 
}); 

昨天我争夺同样的问题了大约一个半小时。我不知道为什么手动添加一个随机查询字符串不起作用,但这解决了我的问题。缓存命中是完全随机的,直到我添加上面的一般设置。

+0

我试过这个,没有运气。我将对OP进行编辑,以指定我直接在记事本中查看.aspx源,并且它们作为缓存版本来自服务器,无论是否涉及JQUERY。也许我应该重申这也是一个IIS问题。 – LesterDove 2011-06-09 19:14:31

+0

就像魅力一样,我的AJAX请求不再被缓存,每次都会得到新的结果。如果不起作用,只需在请求的末尾添加一个随机数(或时间戳),它将被视为一个唯一的请求,而不是从缓存中获取。 – Andreas 2012-05-07 00:20:50

1

为了详细说明@斯特凡的答案,缓存设置为false告诉jQuery来附加一个随机查询字符串,使该请求是唯一的。

?例如:myURL.aspx ID = 123 &回调= & _ = 13245897565132154878