看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
看起来,如果我使用$.get()加载动态内容,结果会缓存在浏览器中。
在QueryString中添加一些随机字符串似乎解决了这个问题(我使用new Date(). tostring()),但这感觉像是一个黑客。
还有别的办法吗? 或者,如果唯一字符串是实现这一点的唯一方法,除了new Date()还有其他建议吗?
当前回答
参考文档: http://api.jquery.com/jquery.ajax/
你可以使用缓存属性:
$.ajax({
method: "GET",
url: "/Home/AddProduct?",
data: { param1: value1, param2: value2},
cache: false,
success: function (result) {
// TODO
}
});
其他回答
另一种方法是在生成ajax调用响应的代码中不提供来自服务器端的缓存头:
response.setHeader( "Pragma", "no-cache" );
response.setHeader( "Cache-Control", "no-cache" );
response.setDateHeader( "Expires", 0 );
我个人觉得查询字符串方法比试图在服务器上设置头文件更可靠——不能保证代理或浏览器不会缓存它(有些浏览器比其他浏览器更差——没有命名)。
我通常使用Math.random(),但我不认为使用日期有任何错误(您不应该以足够快的速度执行AJAX请求来两次获得相同的值)。
下面的代码将阻止所有将来的AJAX请求被缓存,无论您使用的是哪种jQuery方法($。,美元。ajax,等等)。
$.ajaxSetup({ cache: false });
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/
实际上这解决了我的问题。