我需要使用JavaScript重新加载页面,并确保它不是从浏览器缓存中提取,而是从服务器中重新加载页面。因为在此期间,页面的元素将发生更改
在IE和FF上,我发现以下代码运行良好;
window.location.reload(true);
然而,它不能在Chrome或Safari上工作。
我尝试了以下方法,但也无济于事;
window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
有没有解决这个问题的办法?
调查结果
经过调查,我发现这个问题是HTTP协议处理;
Pragma: no-cache
HTTP字段发送请求Last-Modified: DATE1
字段响应location.reload(true)
强制从服务器重新加载而不是缓存<代码>H213<代码>H114Chrome使用<代码>D15字段<代码>H216服务器使用HTTP Status 304 Not Modified
响应
服务器应用程序的错误在于没有注意到动态页内容中的状态更改,因此没有返回200
。但是,Chrome/WebKit是唯一一个在调用JS location.reload(true)
时发送If-Modified-Since
字段的浏览器。
我想我会把我的发现放在这里,以防其他人遇到同样的问题。
发布于 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);
});
发布于 2012-05-23 20:08:33
为了确保页面不是从缓存加载的,您可以向查询添加一些唯一的编号:
window.location = location.href + '?upd=' + 123456;
您也可以使用日期而不是123456
发布于 2012-07-18 15:00:33
伟大的发现!我刚刚遇到了同样的问题,这真的很有帮助!然而,除了你的发现之外,Chrome似乎总是为location.reload()发送一个GET请求……IE/FF正在重复最后一个请求。
https://stackoverflow.com/questions/10719505
复制相似问题