72

我想使用以下方法重新加载页面:

window.location.reload(true); 

但我收到 POSTDATA 警告,因为刷新功能想要重新发送以前的 POST 表单数据。如何在没有此警告的情况下刷新我的页面?

更新:我无法控制该项目!我无法解决 POST 本身!

4

17 回答 17

139

如果没有警告,您将无法刷新;refresh 指示浏览器重复上一个操作。如果重复最后一个操作涉及重新提交数据,则由浏览器选择是否警告用户。

您可以通过执行以下操作重新导航到具有新会话的同一页面:

window.location = window.location.href;
于 2009-02-20T15:38:31.347 回答
67

仅仅更改window.locationJavaScript 是危险的,因为用户仍然可以点击返回按钮并重新提交帖子,这可能会产生意想不到的结果(例如重复购买)。PRG 是一个更好的解决方案

使用发布/重定向/获取 (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;
于 2009-02-20T15:46:59.033 回答
23

我在使用 Rex 的解决方案无法重新加载锚点/哈希 URL(包括 #)时遇到了一些问题...

所以我最终删除了哈希部分:

window.location = window.location.href.split("#")[0];
于 2014-10-22T10:46:56.333 回答
13

要绕过 POST 警告,您必须使用完整的 URL 重新加载页面。工作正常。

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
于 2013-02-19T08:59:40.593 回答
6

您可以使用 JavaScript:

window.location.assign(document.URL);

在 Firefox 和 Chrome 上为我工作

检查此链接: http: //www.codeproject.com/Tips/433399/PRG-Pattern-Post-Redirect-Get

于 2014-05-28T14:41:06.603 回答
5

怎么样 window.location.replace(window.location.href);

于 2010-11-19T20:36:31.460 回答
4

这有效

<button onclick="window.location.href=window.location.href; return false;">Continue</button>

没有它就无法工作的原因

返回假;
是以前它将其视为表单提交按钮。使用明确的 return false ,它不会执行表单提交,而只会重新加载作为先前 POST 到该页面的结果的同一页面。

于 2018-01-22T16:09:48.177 回答
2

如果您处于完成发布数据的阶段并且只想重新查看页面,您可以只使用 window.location 甚至可以附加一个随机字符串作为查询参数以保证新版本的页。

于 2009-02-20T15:39:41.607 回答
2

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;
于 2016-01-06T16:34:06.340 回答
1
<html:form name="Form" type="abc" action="abc.do" method="get" onsubmit="return false;">

method="get"- 解决问题。

if method="post"然后只有警告来了。

于 2014-02-11T04:28:16.723 回答
0

我编写了一个函数,它可以在不提交后重新加载页面,它也可以使用哈希。

我通过在调用的 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,所以这个“重新加载”不是真正的重新加载,而是使用不同查询的加载。尽管如此,它仍然可以满足您的需求,就像对我一样。

于 2016-11-08T14:06:18.260 回答
0

你不必被迫使用 javascript 来做每一件事。许多问题都有像这样的简单解决方案。你可以使用这个棘手的锚:

<a href=".">Continue</a>

当然,我知道您可能需要一个自动解决方案,但这在许多情况下会有所帮助。

祝你好运

于 2019-04-25T07:15:43.670 回答
0

只需使用

location.reload(true);

没有window

于 2021-06-17T20:28:28.080 回答
-1

在 html 中使用元刷新

<meta http-equiv='refresh' content='1'>

在 php 中使用元刷新

echo "<meta http-equiv='refresh' content='1'>"
于 2018-05-14T14:43:42.430 回答
-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;
于 2018-10-15T20:16:42.303 回答
-1

其他解决方案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);
}
于 2018-10-29T10:49:41.957 回答
-2

如果您使用GET方法而不是POST那么我们不能表单字段值。如果您使用window.opener.location.href = window.opener.location.href;,那么我们可以触发 db 并且我们可以获得值,但唯一的问题是JSP即使 scriplet 具有表单值,它也不会刷新。

于 2009-07-03T09:16:24.263 回答