Como faço para recarregar uma página sem um aviso POSTDATA em JavaScript?
-
05-09-2019 - |
Pergunta
Eu quero recarregar uma página usando:
window.location.reload(true);
Mas eu receber o aviso POSTDATA porque a função de atualização deseja reenviar os dados do formulário POST anteriores. Como posso atualizar minha página sem esse aviso?
ATUALIZADO: Eu não tenho o controle do projeto! Eu não posso resolver o próprio POST!
Solução
Apenas mudando window.location
em JavaScript é perigoso porque o usuário ainda pode acertar o botão Voltar e reenvie o cargo, o que poderia ter resultados inesperados (como um compra duplicado ). PRG é uma solução muito melhor
Use o Post / Redirect / Get (PRG) padrão
Para evitar este problema, muitas aplicações web usam o padrão PRG - ao invés de retornar uma página HTML diretamente, a operação POST retorna um comando de redirecionamento (usando o código de resposta HTTP 303 (por vezes 302), juntamente com a resposta HTTP "Location" header), instruindo o navegador para carregar uma página diferente usando uma solicitação HTTP GET. A página de resultado pode então seguramente ser marcada ou recarregados sem efeitos colaterais inesperados.
Outras dicas
Você não pode atualizar sem a advertência; atualização instrui o navegador para repetir a última ação. Cabe ao navegador para escolher se quer avisar o utilizador se repetir a última ação envolve submeter novamente os dados.
Você poderia voltar a navegar para a mesma página com uma nova sessão fazendo:
window.location = window.location.href;
Eu tive alguns problemas com âncora / de hash-urls (incluindo #) não recarregar usando a solução de Rex ...
Então, eu finalmente acabou removendo a parte de hash:
window.location = window.location.href.split("#")[0];
Para ignorar POST avisando deve recarregar a página com URL completa. Funciona bem.
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;
como sobre window.location.replace (window.location.href);
Você pode usar JavaScript:
window.location.assign(document.URL);
funcionou para mim no Firefox e Chrome
verificar este link: http: //www.codeproject. com / Dicas / 433399 / PRG-Pattern-Post-Redirect-obter
Isso funcionou
<button onclick="window.location.href=window.location.href; return false;">Continue</button>
A razão não funcionou sem a
return false;é que anteriormente ele tratou isso como uma forma de botão enviar. Com uma falsa retorno explícita nele, ele não faz o formulário de envio e só faz a recarga da mesma página que foi resultado de um post anterior a essa página.
Se você está na fase em que você terminar com os dados de postagem e simplesmente deseja visualizar a página novamente de novo, você pode simplesmente usar um window.location e talvez até mesmo anexar uma seqüência aleatória como um paramater consulta para garantir um novo versão da página.
A versão de Nikl não passa obter parâmetros de consulta, eu usei a seguinte versão modificada:
window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;
ou no meu caso eu precisava para atualizar a página superior \ quadro, então eu usei a seguinte versão
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"
-. Resolve o problema
if method="post"
então somente aviso vem.
Eu escrevi uma função que irá recarregar a página sem submissão post e ele vai trabalhar com hashes, também.
I fazer isso adicionando / modificando um parâmetro GET na URL chamado reload
, actualizando o seu valor com o timestamp atual em 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;
};
Tenha em mente, se você deseja acionar esta função em um atributo href, implementá-lo desta forma:. href="javascript:reload();void 0;"
para fazer o trabalho, com sucesso
A desvantagem da minha solução é que vai mudar o URL, de modo que este "reload" não é um verdadeiro recarga, em vez disso é uma carga com uma consulta diferente. Mesmo assim, poderia atender às suas necessidades como ele faz para mim.
Você não é obrigado a usar javascript para fazer cada coisa. Muitos problemas têm soluções fáceis como este. você pode usar essa âncora complicado:
<a href=".">Continue</a>
é claro que eu sei que você pode precisar de uma solução automática, mas isso vai ajudar em muitos casos.
boa sorte
usando meta refresh em html
<meta http-equiv='refresh' content='1'>
usando meta refresh em php
echo "<meta http-equiv='refresh' content='1'>"
Aqui está uma solução que deve sempre trabalho e não remove o hash.
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;
Se você usar o método GET
vez de POST
então não podemos a forma arquivado valores. Se você usar window.opener.location.href = window.opener.location.href;
então podemos disparar a db e podemos obter o valor, mas única coisa é a JSP
não é refrescante mesmo admitindo que o scriplet tendo os valores do formulário.