我想使用以下方法重新加载页面:
window.location.reload(true);
但我收到 POSTDATA 警告,因为刷新功能想要重新发送以前的 POST 表单数据。如何在没有此警告的情况下刷新我的页面?
更新:我无法控制该项目!我无法解决 POST 本身!
我想使用以下方法重新加载页面:
window.location.reload(true);
但我收到 POSTDATA 警告,因为刷新功能想要重新发送以前的 POST 表单数据。如何在没有此警告的情况下刷新我的页面?
更新:我无法控制该项目!我无法解决 POST 本身!
如果没有警告,您将无法刷新;refresh 指示浏览器重复上一个操作。如果重复最后一个操作涉及重新提交数据,则由浏览器选择是否警告用户。
您可以通过执行以下操作重新导航到具有新会话的同一页面:
window.location = window.location.href;
仅仅更改window.location
JavaScript 是危险的,因为用户仍然可以点击返回按钮并重新提交帖子,这可能会产生意想不到的结果(例如重复购买)。PRG 是一个更好的解决方案
为了避免这个问题,许多 Web 应用程序使用 PRG 模式——而不是直接返回 HTML 页面,POST 操作返回一个重定向命令(使用 HTTP 303 响应代码(有时是 302)和 HTTP“Location”响应标头),指示浏览器使用 HTTP GET 请求加载不同的页面。然后可以安全地为结果页面添加书签或重新加载,而不会产生意外的副作用。
如果您想完全在客户端执行此操作,则需要在刷新之前更改浏览器历史记录:
if ( window.history.replaceState ) {
window.history.replaceState( null, null, window.location.href );
}
window.location = window.location.href;
我在使用 Rex 的解决方案无法重新加载锚点/哈希 URL(包括 #)时遇到了一些问题...
所以我最终删除了哈希部分:
window.location = window.location.href.split("#")[0];
要绕过 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
怎么样 window.location.replace(window.location.href);
这有效
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
没有它就无法工作的原因
返回假;是以前它将其视为表单提交按钮。使用明确的 return false ,它不会执行表单提交,而只会重新加载作为先前 POST 到该页面的结果的同一页面。
如果您处于完成发布数据的阶段并且只想重新查看页面,您可以只使用 window.location 甚至可以附加一个随机字符串作为查询参数以保证新版本的页。
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;
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">
method="get"
- 解决问题。
if method="post"
然后只有警告来了。
我编写了一个函数,它可以在不提交后重新加载页面,它也可以使用哈希。
我通过在调用的 URL 中添加/修改 GET 参数来做到这一点,方法是reload
使用当前时间戳(以 ms 为单位)更新其值。
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,所以这个“重新加载”不是真正的重新加载,而是使用不同查询的加载。尽管如此,它仍然可以满足您的需求,就像对我一样。
你不必被迫使用 javascript 来做每一件事。许多问题都有像这样的简单解决方案。你可以使用这个棘手的锚:
<a href=".">Continue</a>
当然,我知道您可能需要一个自动解决方案,但这在许多情况下会有所帮助。
祝你好运
只需使用
location.reload(true);
没有window
。
在 html 中使用元刷新
<meta http-equiv='refresh' content='1'>
在 php 中使用元刷新
echo "<meta http-equiv='refresh' content='1'>"
这是一个应该始终有效且不会删除哈希的解决方案。
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);
}
如果您使用GET
方法而不是POST
那么我们不能表单字段值。如果您使用window.opener.location.href = window.opener.location.href;
,那么我们可以触发 db 并且我们可以获得值,但唯一的问题是JSP
即使 scriplet 具有表单值,它也不会刷新。