2012-06-02 10 views
8

Quiero crear un botón para volver a cargar una página sin perder los datos $_POST y $_SESSION.
En la web, me encontré con este pedazo de código:"location.reload()" pierde los datos de POST/SESSION? (F5/Ctrl + R mantiene los datos?)

onclick="document.location.reload();" 

Y aquí es el código de mi botón:

<a class="button" href="" style="font-size: 0.7em; padding: 5px 10px;" onclick="document.location.reload();">Recharger la page</a> 

Pero cuando hago clic en el botón, no pierda yo $_POST de datos y $_SESSION.

Si trato con el comando de teclado Ctrl + R (Chrome) o F5 (Firefox, IE9), el navegador está mostrando una alerta para notificarme que estoy de nuevo tratando de enviar el formulario. Si acepto, funciona.

¿Cómo puedo reproducir este tipo de actualización del navegador con un comando de JavaScript? ¿O es incorrecto el código de mi botón?

Muchas gracias por su ayuda.

Respuesta

2

Esto debería suceder en cualquier caso, siempre que se encuentre en la misma ubicación a la que se realizó la transferencia. Sin embargo, es común redirigir después de una solicitud POST para evitar exactamente lo que estás tratando de hacer.

La razón por la cual su código no funciona es el hecho de que href="" causará una solicitud GET a la URL actual. Use href="#" para evitar que cargue una página "nueva" o agregue return false; al final de su código onclick="...".

+0

Cuando en F5 prensa, en Firefox, por ejemplo, funciona bien. Solo quiero encontrar una forma de hacerlo con un botón de JavaScript? – Zorkzyd

+0

'location.reload()' debería hacer el trabajo como se puede ver en http://jsfiddle.net/ThiefMaster/thTyD/ (tenga en cuenta que primero debe hacer clic en "Ejecutar" para que el panel de salida se cargue realmente mediante POST). – ThiefMaster

+0

Pero mi código anterior no funciona ... onclick = "document.location.reload();". ¿Es debido a href = ""? – Zorkzyd

9

Trate de usar

location.reload(true); 

Se realizará una actualización de "duro", no simplemente reconstruyendo el DOM pero también recuperando cualquier recurso del servidor.

You can read more at the Mozilla Developer wiki.

Aparentemente, location.reload() es el equivalente de F5 en scripting, mientras Ctrl+F5/Ctrl+R puedan simularse utilizando location.reload(true).

Además, como se ha mencionado ThiefMaster, que se está perdiendo ;return false al final de su declaración onclick, o se debe configurar el href a javascript:void 0* a impedir que el navegador siguiendo el enlace.

* O cualquier otro fragmento de código JavaScript que devuelve undefined

+0

Cuando uso location.reload (true), el navegador está dando la alerta para notificar que estoy intentando enviar el formulario nuevamente. Si acepto, no funciona. ¿Es debido a href = ""? – Zorkzyd

+0

Esto se debe a que el navegador volverá a cargar utilizando exactamente los mismos parámetros y el mismo método de solicitud que utilizó cuando cargó la página por primera vez. Si no quiere repetir esto, mejor podría primero almacenar los datos en $ _SESSION y luego hacer un 'encabezado (" 303 Ver Otro ")' y un 'encabezado (" Ubicación: $ _SERVER ['REQUEST_URI'] ") 'para volver a cargar la página con una solicitud GET. – user2428118

+0

Gracias por su respuesta, pero ThiefMaster me dio la solución :) – Zorkzyd

Cuestiones relacionadas