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

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

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


当前回答

下面的代码将阻止所有将来的AJAX请求被缓存,无论您使用的是哪种jQuery方法($。,美元。ajax,等等)。

$.ajaxSetup({ cache: false });

其他回答

参考文档: http://api.jquery.com/jquery.ajax/

你可以使用缓存属性:

$.ajax({
    method: "GET",
    url: "/Home/AddProduct?",
    data: { param1: value1, param2: value2},
    cache: false,
    success: function (result) {
        // TODO
    }
});

我使用new Date().getTime(),这将避免冲突,除非你有多个请求发生在同一毫秒内:

$.get('/getdata?_=' + new Date().getTime(), function(data) {
    console.log(data); 
});

编辑:这个答案是几年前的了。它仍然可以工作(因此我没有删除它),但现在有更好/更干净的方法来实现这一点。我倾向于使用这种方法,但是如果您想在页面的生命周期内为每个请求禁用缓存,那么这个答案也很有用。

也许你应该看看$.ajax()(如果你使用的是jQuery,它看起来就像jQuery)。 看一下:http://docs.jquery.com/Ajax/jQuery.ajax#options和选项“缓存”。

另一种方法是研究如何在服务器端缓存内容。

下面的代码将阻止所有将来的AJAX请求被缓存,无论您使用的是哪种jQuery方法($。,美元。ajax,等等)。

$.ajaxSetup({ cache: false });

用POST请求代替GET请求怎么样? (无论如何你应该……)