我想使用以下方法重新加载页面:
window.location.reload(true);
但是我收到POSTDATA警告,因为刷新功能想重新发送以前的POST表单数据。如何在没有此警告的情况下刷新页面?
更新:我无法控制该项目!我无法解决POST本身!
我想使用以下方法重新加载页面:
window.location.reload(true);
但是我收到POSTDATA警告,因为刷新功能想重新发送以前的POST表单数据。如何在没有此警告的情况下刷新页面?
更新:我无法控制该项目!我无法解决POST本身!
Answers:
仅更改window.location
JavaScript是很危险的,因为用户仍然可以按“后退”按钮并重新提交帖子,这可能会产生意想不到的结果(例如重复购买)。PRG是更好的解决方案
为避免此问题,许多Web应用程序都使用PRG模式-POST操作返回重定向命令(使用HTTP 303响应代码(有时是302)以及HTTP“ Location”响应标头),而不是直接返回HTML页面,指示浏览器使用HTTP GET请求加载其他页面。然后可以安全地将结果页面添加为书签或重新加载,而不会产生意外的副作用。
没有警告,您无法刷新;refresh指示浏览器重复上一个操作。如果重复最后一个操作涉及重新提交数据,则由浏览器决定是否警告用户。
您可以执行以下操作重新导航到具有新会话的同一页面:
window.location = window.location.href;
要绕过POST警告,您必须使用完整的URL重新加载页面。工作良好。
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
您可以使用JavaScript:
window.location.assign(document.URL);
在Firefox和Chrome上为我工作
检查此链接:http : //www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get
Nikl的版本未传递get查询参数,我使用了以下修改后的版本:
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;
或者我需要刷新最顶部的页面\框架,因此我使用了以下版本
window.top.location.href = window.top.location.protocol +'//'+ window.top.location.host + window.top.location.pathname + window.top.location.search;
我编写了一个无需重新提交即可重新加载页面的函数,它也可以使用哈希值。
我通过在URL中添加/修改GET参数(reload
通过使用当前时间戳(以毫秒为单位)更新其值)来做到这一点。
var reload = function () {
var regex = new RegExp("([?;&])reload[^&;]*[;&]?");
var query = window.location.href.split('#')[0].replace(regex, "$1").replace(/&$/, '');
window.location.href =
(window.location.href.indexOf('?') < 0 ? "?" : query + (query.slice(-1) != "?" ? "&" : ""))
+ "reload=" + new Date().getTime() + window.location.hash;
};
请记住,如果要在href属性中触发此功能,请以以下方式实现:href="javascript:reload();void 0;"
成功运行它。
我的解决方案的缺点是它将更改URL,因此此“重新加载”不是真正的重新加载,而是具有不同查询的加载。尽管如此,它仍然可以像我一样满足您的需求。
这是一个应该始终有效并且不会删除哈希的解决方案。
let currentPage = new URL(window.location.href);
currentPage.searchParams.set('r', (+new Date * Math.random()).toString(36).substring(0, 5));
window.location.href = currentPage.href;
其他解决方案window.location
对我不起作用,因为它们根本没有刷新它,所以我要做的是,我使用一个空表格将新的和空的postdata传递到同一页面。这是基于此答案的一种方法:
function refreshAndClearPost() {
var form = document.createElement("form");
form.method = "POST";
form.action = location.href;
form.style.display = "none";
document.body.appendChild(form);
form.submit(); //since the form is empty, it will pass empty postdata
document.body.removeChild(form);
}