看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。

在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。

还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?


当前回答

如果你正在使用。net ASP MVC,通过在end point函数上添加以下属性禁用控制器动作上的缓存:

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]

其他回答

对于那些在移动Safari上使用$. ajaxsetup()缓存选项的人来说,似乎必须为post使用时间戳,因为移动Safari也会缓存这个选项。根据$.ajax()的文档(你可以从$.ajaxSetup()跳转到该文档):

将cache设置为false将只对HEAD和GET请求有效。它通过将“_={timestamp}”附加到GET参数来工作。对于其他类型的请求,该参数不需要,除非在IE8中,当对一个已经被GET请求的URL进行POST时。

因此,单独设置这个选项在我上面提到的情况下是没有帮助的。

基本上只需要添加cache:false;在ajax中,你认为内容会随着进程的进行而改变。在内容不会改变的地方,你可以省略这个。这样你每次都会得到新的响应

将Math.random()追加到请求url

如果你正在使用。net ASP MVC,通过在end point函数上添加以下属性禁用控制器动作上的缓存:

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)]

另一种方法是在生成ajax调用响应的代码中不提供来自服务器端的缓存头:

response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );