看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
当前回答
除了给出的优秀答案,还有一个小小的补充:如果您正在为没有javascript的用户运行非ajax备份解决方案,那么无论如何您都必须使服务器端头正确。这不是不可能的,尽管我理解那些放弃它的人;)
我相信还有另一个关于SO的问题会给你全套合适的标题。我不完全相信老鼠的回答涵盖了所有的基础100%。
其他回答
参考文档: http://api.jquery.com/jquery.ajax/
你可以使用缓存属性:
$.ajax({
method: "GET",
url: "/Home/AddProduct?",
data: { param1: value1, param2: value2},
cache: false,
success: function (result) {
// TODO
}
});
也许你应该看看$.ajax()(如果你使用的是jQuery,它看起来就像jQuery)。 看一下:http://docs.jquery.com/Ajax/jQuery.ajax#options和选项“缓存”。
另一种方法是研究如何在服务器端缓存内容。
添加标题
headers: {
'Cache-Control':'no-cache'
}
我使用new Date().getTime(),这将避免冲突,除非你有多个请求发生在同一毫秒内:
$.get('/getdata?_=' + new Date().getTime(), function(data) {
console.log(data);
});
编辑:这个答案是几年前的了。它仍然可以工作(因此我没有删除它),但现在有更好/更干净的方法来实现这一点。我倾向于使用这种方法,但是如果您想在页面的生命周期内为每个请求禁用缓存,那么这个答案也很有用。
这里所有的答案都在请求的URL上留下一个足迹,这将显示在服务器的访问日志中。
我需要一个基于头的解决方案,没有副作用,我发现它可以通过设置在如何控制网页缓存中提到的头来实现,在所有浏览器?
结果是,至少在Chrome上是这样的:
. ajax({美元 url: url、 标题:{ 'Cache-Control': '无缓存,无存储,必须重新验证', “杂注”:“no - cache”, “到期”:“0” } });