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

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

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


当前回答

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

$.ajaxSetup({ cache: false });

其他回答

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

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

正如@Athasach所说,根据jQuery文档,$. ajaxsetup ({cache:false})将不适用于GET和HEAD请求。

你最好从你的服务器发送回一个Cache-Control: no-cache头。它提供了更清晰的关注点分离。

当然,这对不属于项目的服务url不起作用。在这种情况下,您可以考虑从服务器代码代理第三方服务,而不是从客户端代码调用它。

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

$.ajaxSetup({ cache: false });

除了给出的优秀答案,还有一个小小的补充:如果您正在为没有javascript的用户运行非ajax备份解决方案,那么无论如何您都必须使服务器端头正确。这不是不可能的,尽管我理解那些放弃它的人;)

我相信还有另一个关于SO的问题会给你全套合适的标题。我不完全相信老鼠的回答涵盖了所有的基础100%。

现在,通过在ajax请求中启用/禁用缓存选项很容易做到这一点,就像这样

$(function () {
    var url = 'your url goes here';
    $('#ajaxButton').click(function (e) {
        $.ajax({
            url: url,
            data: {
                test: 'value'
            },
                cache: true, //cache enabled, false to reverse
                complete: doSomething
            });
        });
    });
    //ToDo after ajax call finishes
    function doSomething(data) {
        console.log(data);
    }
});