看起来如果我使用 加载动态内容$.get()
,结果会缓存在浏览器中。
在 QueryString 中添加一些随机字符串似乎解决了这个问题(我使用new Date().toString()
),但这感觉就像一个黑客。
有没有其他方法可以实现这一目标?或者,如果唯一字符串是实现此目的的唯一方法,那么除了new Date()
?
看起来如果我使用 加载动态内容$.get()
,结果会缓存在浏览器中。
在 QueryString 中添加一些随机字符串似乎解决了这个问题(我使用new Date().toString()
),但这感觉就像一个黑客。
有没有其他方法可以实现这一目标?或者,如果唯一字符串是实现此目的的唯一方法,那么除了new Date()
?
无论您使用哪种 jQuery 方法($.get、$.ajax 等),以下内容都将阻止缓存所有未来的 AJAX 请求
$.ajaxSetup({ cache: false });
JQuery 的 $.get() 将缓存结果。代替
$.get("myurl", myCallback)
您应该使用 $.ajax,这将允许您关闭缓存:
$.ajax({url: "myurl", success: myCallback, cache: false});
这里的所有答案都会在请求的 URL 上留下足迹,该 URL 将显示在服务器的访问日志中。
我需要一个没有副作用的基于标头的解决方案,我发现它可以通过设置如何跨所有浏览器控制网页缓存中提到的标头来实现。.
结果,至少适用于 Chrome,将是:
$.ajax({
url: url,
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
});
另一种方法是在生成对 ajax 调用的响应的代码中不提供来自服务器端的缓存头:
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );