首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Javascript强制在Chrome中重新加载页面[无缓存]

使用Javascript强制在Chrome中重新加载页面[无缓存]
EN

Stack Overflow用户
提问于 2012-05-23 20:02:50
回答 5查看 31.6K关注 0票数 22

我需要使用JavaScript重新加载页面,并确保它不是从浏览器缓存中提取,而是从服务器中重新加载页面。因为在此期间,页面的元素将发生更改

在IE和FF上,我发现以下代码运行良好;

window.location.reload(true);

然而,它不能在Chrome或Safari上工作。

我尝试了以下方法,但也无济于事;

window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);

有没有解决这个问题的办法?

调查结果

经过调查,我发现这个问题是HTTP协议处理;

  1. Chrome使用Pragma: no-cache HTTP字段发送请求
  2. 服务器使用Last-Modified: DATE1字段响应
  3. JS使用location.reload(true)强制从服务器重新加载而不是缓存<代码>H213<代码>H114Chrome使用<代码>D15字段<代码>H216服务器使用HTTP Status 304 Not Modified

响应

服务器应用程序的错误在于没有注意到动态页内容中的状态更改,因此没有返回200。但是,Chrome/WebKit是唯一一个在调用JS location.reload(true)时发送If-Modified-Since字段的浏览器。

我想我会把我的发现放在这里,以防其他人遇到同样的问题。

EN

回答 5

Stack Overflow用户

发布于 2014-11-21 17:45:43

你可以使用这个技巧:

 $.ajax({
        url: window.location.href,
        headers: {
            "Pragma": "no-cache",
            "Expires": -1,
            "Cache-Control": "no-cache"
        }
    }).done(function () {
        window.location.reload(true);
    });
票数 15
EN

Stack Overflow用户

发布于 2012-05-23 20:08:33

为了确保页面不是从缓存加载的,您可以向查询添加一些唯一的编号:

window.location = location.href + '?upd=' + 123456;

您也可以使用日期而不是123456

票数 8
EN

Stack Overflow用户

发布于 2012-07-18 15:00:33

伟大的发现!我刚刚遇到了同样的问题,这真的很有帮助!然而,除了你的发现之外,Chrome似乎总是为location.reload()发送一个GET请求……IE/FF正在重复最后一个请求。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10719505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档