【问题标题】:Is there another way to disable cache when fetching script?获取脚本时是否有另一种禁用缓存的方法?
【发布时间】:2015-08-31 04:03:27
【问题描述】:

我用它来获取脚本;

$.getScript("http://www.example.org/");

但是,我不希望它被缓存。意味着如果我再次使用 getScript,脚本应该再次获取它。

这个理论上可行;

$.getScript("http://www.example.org/?" + Math.random());

但实际上并非如此。因为“?”在远程站点 url 上被禁用,所以我的问题是,有没有其他方法可以告诉浏览器不缓存?

【问题讨论】:

  • This 可能会帮助你
  • 是的,但这需要添加到远程站点的页面。如果可以,我会先删除“?”保护:)
  • Jquery getScript caching的可能重复

标签: javascript jquery


【解决方案1】:

根据需要重新创建函数:

(function () {
    $.getScript = function(url, callback) {
        $.ajax({
                type: "GET",
                url: url,
                success: callback,
                dataType: "script",
                cache: false
        });
    };
})();

现在当你像这样调用函数时它不会再缓存了

$.getScript('script.js', function()
{
    // non cached script.js
});

【讨论】:

  • 如果你这样做,正如我看到的日志,它会添加相同的内容。像这样 /?=_768472138423
【解决方案2】:

远程站点无法禁用"http://www.example.org/?" + Math.random() 的有效性以防止缓存。

"?" + Math.random() 的重点是创建一个不会在本地浏览器缓存中的唯一 URL。做出此缓存决定的是本地浏览器,对于本地浏览器缓存,远程站点是否忽略 URL 的 "?" + Math.random() 部分并不重要。

仅供参考,解决缓存的另一种方法是让您的服务器在检索此脚本时返回正确的缓存标头,指示浏览器永远不要缓存此文件。

【讨论】:

  • 他们禁用了“?”在网站 url 结构上。因此,如果您尝试像这样显示 example.org/index.php?123 ,它会显示禁止。因为他们禁用了“?”
  • @user198989 - 好的,这是一个更清晰的描述。然后你必须解决从服务器缓存标头的问题。
  • 浏览器端一定有东西。也许一些元标记来防止cavhe。
  • @user198989 - 您可以在页面中使用<meta> 标签,但这也是服务器端的事情。当您通过 Javascript 添加 <meta> 标记时,该页面已经在缓存中,因为它来自服务器。
猜你喜欢
  • 1970-01-01
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2018-06-04
  • 1970-01-01
  • 2013-09-12
相关资源
最近更新 更多