Pregunta

Quiero volver a cargar una página utilizando:

window.location.reload(true); 

Pero recibo el aviso POSTDATA debido a que la función de actualización quieren volver a enviar los datos del formulario post anterior. ¿Cómo puedo actualizar mi página sin esta advertencia?

ACTUALIZADO: no tengo control del proyecto! No puedo solucionar el POST sí!

¿Fue útil?

Solución

Simplemente cambiar window.location en JavaScript es peligroso ya que el usuario todavía podría golpear el botón Atrás y volver a enviar el mensaje, lo que podría tener resultados inesperados (como un duplicar la compra ). PRG es una solución mucho mejor

Utilice el Post / redirección / Get (PRG) patrón

  

Para evitar este problema, muchas aplicaciones web utilizan el patrón PRG - en lugar de devolver una página HTML directamente, la operación POST devuelve un comando de redireccionamiento (utilizando el código de respuesta HTTP 303 (a veces 302) junto con la respuesta HTTP "Lugar" cabecera), dando instrucciones al navegador para cargar una página diferente mediante una solicitud GET HTTP. La página de resultados puede entonces de forma segura ser marcada o vuelve a cargar sin efectos secundarios inesperados.

Otros consejos

No se puede actualizar sin la advertencia; refresco indica al navegador que repetir la última acción. Corresponde al navegador de elegir si desea advertir al usuario si repetir la última acción implica volver a enviar los datos.

Se podría volver a navegar a la misma página con una nueva sesión haciendo:

window.location = window.location.href;

He tenido algunos problemas con el anclaje / hash URL (incluyendo #) no se recarga utilizando la solución de Rex ...

Así que finalmente terminó eliminando la parte de hash:

window.location = window.location.href.split("#")[0];

Para después de derivación de advertencia debe volver a cargar la página con URL completa. Funciona bien.

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname;

cómo sobre window.location.replace (window.location.href);

Puede utilizar JavaScript:

window.location.assign(document.URL);

a mí me funcionó en Firefox y Chrome

comprobar este enlace: http: //www.codeproject. com / Consejos / 433399 / PRG-patrón-post-redirección-get

Esto funcionó

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

La razón de que no funciona sin la

return false;
es que previamente tratada como una forma de que botón de enviar. Con una falsa rendimiento explícito en él, no lo hace la forma en enviar y sólo lo hace la recarga de la misma página que fue el resultado de una entrada anterior a esa página.

Si usted está en la etapa en que haya terminado con los datos de envío y simplemente desea ver de nuevo la página de nuevo, es posible que utilices una window.location e incluso tal vez añadir una cadena aleatoria como un parámetro de consulta para garantizar un nuevo versión de la página.

La versión de Nikl no pasa a obtener los parámetros de consulta, he utilizado la siguiente versión modificada:

window.location.href = window.location.protocol +'//'+ window.location.host + window.location.pathname + window.location.search;

o en mi caso necesitaba para actualizar la página \ marco superior, por lo que utiliza la siguiente versión

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" - resuelve el problema

.

if method="post" entonces sólo de aviso se.

He escrito una función que se recargue la página de presentación sin cargo y que trabajará con los hashes, también.

Para ello, agregue / modificar un parámetro GET en la URL llamada reload mediante la actualización de su valor con la fecha y hora actual en 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;
};

Tenga en cuenta, si desea activar esta función en un atributo href, poner en práctica esta manera:. href="javascript:reload();void 0;" para hacer que funcione, con éxito

La desventaja de mi solución es que va a cambiar la URL, por lo que esta "recarga" no es una verdadera recarga, sino que es una carga con una consulta diferente. Sin embargo, podría satisfacer sus necesidades como lo hace para mí.

usted no está obligado a usar javascript para hacer cada cosa. Muchos problemas tienen soluciones fáciles como ésta. puede usar esta ancla complicado:

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

Por supuesto que sé es posible que necesite una solución automática, pero esto le ayudará en muchos casos.

buena suerte

usando meta de actualización en html

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

usando meta de actualización en php

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

Esto es una solución que siempre se debe trabajar y no elimina el 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;

Si utiliza el método GET en lugar de POST entonces no podemos valores de la forma presentada. Si utiliza window.opener.location.href = window.opener.location.href; entonces puede disparar el PP y podemos obtener el valor, pero lo único es el JSP no es refrescante apesar de la scriplet tener los valores del formulario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top