【问题标题】:Google Hosted Libraries is unnecessarily using cache breakersGoogle 托管库不必要地使用了缓存断路器
【发布时间】:2014-03-12 18:50:56
【问题描述】:

我在我们的仪表板上使用以下代码不断刷新它而不闪烁How can I refresh a page with jQuery?

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script>
setTimeout(function() {
    $.ajax({
        url: "",
        context: document.body,
        success: function(s,x){
            $(this).html(s);
        }
    });
}, 4000);
</script>

但是,由于某些缓存中断,这也会导致每次 javascript 重新加载。

Google 正在发送以下标头:

为了不让我和我的客户被 Google 屏蔽(那时还不如成为门诺派),有没有一种方法可以使用 Google CDN 而不会导致这些额外的请求?

【问题讨论】:

  • 不确定空 url 是如何工作的...你试过在 ajax 选项上设置 cache:true 吗?
  • No dice with: $.ajax({ url: "", cache: true, context: document.body, success: function(s,x){ $(this).html(s) ; } });
  • 嗯.. 认为这太容易了 ;-)
  • 由于您已经加载了 jQuery(以及您需要的所有其他脚本),而不是刷新所有正文(脚本标签所在的位置)刷新一个没有脚本标签的容器.
  • 还有一个有趣的问题要问,为什么 google 会破坏这种“不必要的”缓存。我怀疑谷歌托管这些库的全部原因是他们可以跟踪使用这些库的页面的用户。因此,他们不希望通过缓存减少这些跟踪命中。

标签: javascript jquery html ajax reload


【解决方案1】:

警告未经测试:

$.ajax({
    url: "",
    dataType: "text", //dont parse the html you're going to do it manually
    success: function(html) {
        var $newDoc = $.parseHTML(html, document, false); //false to prevent scripts from being parsed.
        $('body').replaceWith(newDoc.find("body")); //only replace body
    }
});

更好的解决方案是将你的身体模板化。

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2016-12-05
    • 2020-03-02
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-06
    相关资源
    最近更新 更多