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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top