看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
当前回答
将Math.random()追加到请求url
其他回答
JQuery的$.get()将缓存结果。而不是
$.get("myurl", myCallback)
你应该使用$。Ajax,它将允许你关闭缓存:
$.ajax({url: "myurl", success: myCallback, cache: false});
这里所有的答案都在请求的URL上留下一个足迹,这将显示在服务器的访问日志中。
我需要一个基于头的解决方案,没有副作用,我发现它可以通过设置在如何控制网页缓存中提到的头来实现,在所有浏览器?
结果是,至少在Chrome上是这样的:
. ajax({美元 url: url、 标题:{ 'Cache-Control': '无缓存,无存储,必须重新验证', “杂注”:“no - cache”, “到期”:“0” } });
下面的代码将阻止所有将来的AJAX请求被缓存,无论您使用的是哪种jQuery方法($。,美元。ajax,等等)。
$.ajaxSetup({ cache: false });
现在,通过在ajax请求中启用/禁用缓存选项很容易做到这一点,就像这样
$(function () {
var url = 'your url goes here';
$('#ajaxButton').click(function (e) {
$.ajax({
url: url,
data: {
test: 'value'
},
cache: true, //cache enabled, false to reverse
complete: doSomething
});
});
});
//ToDo after ajax call finishes
function doSomething(data) {
console.log(data);
}
});
如果你正在使用ie9,那么你需要在你的控制器类定义前使用以下代码:
[OutputCache(NoStore = true, duration = 0, VaryByParam = “*”)]
公共类TestController:控制器
这将阻止浏览器缓存。
有关此连结的详情: http://dougwilsonsa.wordpress.com/2011/04/29/disabling-ie9-ajax-response-caching-asp-net-mvc-3-jquery/
实际上这解决了我的问题。