如何装载页面,而无需在JavaScript中POSTDATA警告?
-
05-09-2019 - |
题
我想用重新加载的页面:
window.location.reload(true);
不过,我收到POSTDATA警告,因为刷新功能要重新发送一次POST表单数据。我怎么能刷新我的网页没有这个警告?
更新:我没有这个项目的控制!我无法解决该职位本身!
解决方案
只需改变window.location
在JavaScript是的危险强>因为用户仍可以击中的后退按钮并重新提交后,这可能会有意想不到的效果(例如,<强>重复购买强>)。 PRG是一个更好的解决方案
要避免这个问题,很多web应用使用PRG模式 - 而不是直接返回的HTML页面,该POST操作返回重定向命令(使用HTTP 303响应代码(有时302)一起使用HTTP“位置”响应报头),指示浏览器使用HTTP GET请求加载不同的页面。结果页面可以随后被安全地书签或重新载入时意想不到的副作用。
其他提示
您不能刷新无警告;刷新指示浏览器重复上一个动作。它是由浏览器选择是否警告用户如果重复最后的动作涉及重新提交数据。
这样做你可以再导航到同一页用新的会话:
window.location = window.location.href;
我有一些问题与锚/哈希网址(包括#),使用从雷克斯溶液不重装...
所以最后结束了通过去除散列部:
window.location = window.location.href.split("#")[0];
要绕过POST警告您必须使用完整的URL加载页面。工作正常。
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
如何约window.location.replace(window.location.href);
可以使用JavaScript:
window.location.assign(document.URL);
为我工作在Firefox和铬
检查此链接: HTTP://www.codeproject。 COM /提示/ 433399 / PRG图案后重定向-GET
此工作
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
它没有没有
return false;工作的原因是,以前它处理,作为一个形式提交按钮。随着它的明确的返回假的,它不会做的表单提交,只是做了同样的页面,这是一前一后到该页面的结果。
的重装
如果您是在哪里你完成后数据的阶段,只是想重新再次查看该页面,你可以只使用一个window.location的,甚至可能添加一个随机字符串作为查询paramater以保证新版本的页面。
NIKL的版本没有通过获得查询参数,我用下面的修改后的版本:
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"
然后只发出警告。
我已经写了将刷新页面,而不提交后,它会与哈希工作,也是一个功能。
我通过添加/通过与MS当前时间戳更新其值修改所述URL称为reload
GET参数做到这一点。
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>
当然,我知道你可能需要一个自动的解决方案,但是这将在许多情况下帮助。
好运
在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;
如果您使用GET
方法代替POST
的那么我们不能形式提交的值。如果你使用window.opener.location.href = window.opener.location.href;
那么我们就可以触发分贝,我们可以得到的价值,但只有一点是JSP
不刷新eventhough具有形成价值观scriplet。