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

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

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


当前回答

JQuery的$.get()将缓存结果。而不是

$.get("myurl", myCallback)

你应该使用$。Ajax,它将允许你关闭缓存:

$.ajax({url: "myurl", success: myCallback, cache: false});

其他回答

当然,“缓存破坏”技术可以完成这项工作,但是如果服务器指示客户机不应该缓存响应,那么这种情况一开始就不会发生。在某些情况下缓存响应是有益的,而在某些情况下则不然。让服务器决定数据的正确生命周期。稍后您可能想要更改它。在服务器上比在UI代码的其他地方要容易得多。

当然,如果您无法控制服务器,这是没有帮助的。

我个人觉得查询字符串方法比试图在服务器上设置头文件更可靠——不能保证代理或浏览器不会缓存它(有些浏览器比其他浏览器更差——没有命名)。

我通常使用Math.random(),但我不认为使用日期有任何错误(您不应该以足够快的速度执行AJAX请求来两次获得相同的值)。

添加标题

headers: {
                'Cache-Control':'no-cache'
            }

JQuery的$.get()将缓存结果。而不是

$.get("myurl", myCallback)

你应该使用$。Ajax,它将允许你关闭缓存:

$.ajax({url: "myurl", success: myCallback, cache: false});

如果你正在使用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/

实际上这解决了我的问题。