看起来如果我使用$.get()
加载动态内容,结果会被浏览器缓存。
在查询字符串中添加一些随机字符串似乎可以解决此问题(我使用new Date().toString()
),但这感觉像是一个hack。
是否有其他方法可以实现这一点?
或者,如果唯一的方法是使用唯一字符串,除了new Date()
之外还有什么建议吗?
看起来如果我使用$.get()
加载动态内容,结果会被浏览器缓存。
在查询字符串中添加一些随机字符串似乎可以解决此问题(我使用new Date().toString()
),但这感觉像是一个hack。
是否有其他方法可以实现这一点?
或者,如果唯一的方法是使用唯一字符串,除了new Date()
之外还有什么建议吗?
$.ajaxSetup({ cache: false });
$.get("myurl", myCallback)
你应该使用$.ajax,这将允许你关闭缓存:
$.ajax({url: "myurl", success: myCallback, cache: false});
$.ajax
和cache: false
时,jQuery会在URL中附加时间戳,以确保从服务器获取新的响应结果。 - DigitalDannew Date().getTime()
代码被用来这样写... var nocache = new Date().getTime(); var path = 'http://hostname.domain.tld/api/somejsonapi/?cache=' + nocache;
。我自己花了几分钟才弄明白这个。当然,?cache
可以是API实际不想要的任何词语。 - doubleJurl = url + (-1 === url.indexOf('?') ? '?' : '&') + "__=" + Number(new Date());
- user257319这里所有的答案都会在服务器的访问日志中留下请求URL的足迹。
我需要一个基于头部的解决方案,没有副作用,我发现可以通过设置如何控制所有浏览器上网页缓存?中提到的标头来实现。
至少对于Chrome而言,结果如下:
$.ajax({
url: url,
headers: {
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
'Expires': '0'
}
});
另一种方法是在生成响应请求的代码中,从服务器端提供无缓存头部信息:
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );
response.setHeader("Cache-Control", "max-age=0,no-cache,no-store,post-check=0,pre-check=0");
- Chris Broski按照文档要求:http://api.jquery.com/jquery.ajax/
您可以使用cache
属性:
$.ajax({
method: "GET",
url: "/Home/AddProduct?",
data: { param1: value1, param2: value2},
cache: false,
success: function (result) {
// TODO
}
});
个人认为使用查询字符串方法比在服务器上设置标头更可靠 - 没有保证代理或浏览器不会缓存它(一些浏览器比其他浏览器更糟糕,不点名)。
我通常使用 Math.random()
,但是我认为使用日期也没有问题(你不应该频繁发起AJAX请求以获取相同的值两次)。
$.now()
代替每次都执行 (new Date().getTime())。 - epicwhale