Jump to content

Problemas con history.back() y Google Chrome


Recommended Posts

Hola, espero que estén bien.

 

Bueno, la cosa es que estoy haciendo una página en PHP (Mysql como bd), y estoy usando Javascript para hacer una validaciones.

 

El formulario trata de ingresar un cliente, por tanto se ingresan los datos en unas cajas, y luego hay un botón (submit), que redirecciona a la misma página (lo que pasa es que el formulario para editar y agregar es el mismo, y dependiendo del acceso se le cambian algunas cosas, como el value del botón y una opción volver que aparece.

 

La cosa, es que cuando estoy haciendo validaciones.

 

Por favor, vean el siguiente código:

if ($_REQUEST['boton']=="Ingresar")
            {
                $rut_cl=$_REQUEST['rut_cl'];
                $nom_cl=$_REQUEST['nom_cl'];
                $ciu_cl=$_REQUEST['ciu_cl'];
                $tel_cl=$_REQUEST['tel_cl'];
                $dir_cl=$_REQUEST['dir_cl'];
                $emp_cl=$_REQUEST['emp_cl'];
                $tip_cl=$_REQUEST['tip_cl'];
                if ($rut_cl == "")
                    {
                         ?>
                        <script>
                            window.alert("Falta ingresar el RUT del cliente");
                            history.back();
                        </script>
                        <?php
                    }
                    elseif ($nom_cl == "")
                            {
                                 ?>
                                <script>
                                    window.alert("Falta ingresar el nombre del cliente");
                                    history.back();
                                </script>
                                <?php
                            }
                    elseif ($ciu_cl == "")
                            {
                                 ?>
                                <script>
                                    window.alert("Falta ingresar la ciudad del cliente");
                                    history.back();
                                </script>
                                <?php
                            }
                    elseif ($tip_cl == "")
                            {
                                 ?>
                                <script>
                                    window.alert("Falta ingresar el tipo de cliente");
                                    history.back();
                                </script>
                                <?php
                            }
                    else
                    {
                        $mysql_host = "localhost";
                        $mysql_database = "defiance";....

 

En Mozilla funciona "bien", el detalle, es que si me faltó un dato, y tira el mensaje, cuando hace el history.back(), los datos de las cajas se desaparecen.

 

En Chrome, funciona aparentemente bien, pero al navegar un poco, meterme a otros formularios, insertar, lesear con las validaciones, etc, se cae en momentos puntuales, saliendo lo siguiente:

 

Confirmar reenvío del formulario

 

Para que esta página web pueda mostrarse correctamente se requieren los datos que has especificado anteriormente. Puedes enviar estos datos de nuevo, pero se repetirá cualquier acción que haya realizado la página anteriormente. Pulsa "Cargar de nuevo" para reenviar los datos y mostrar esta página

 

Y eso, la verdad es que le he dado muchas vueltas, y no se como solucionarlo.

 

Busqué en google, y en efecto, Chrome tiene problemas con el history.back, y el history.go.

 

Si alguien tiene alguna forma de solucionarlo, o quizás me presenta una forma de validar menos complicada, ojala me pueda explicar (debo decir que, si no dejara esos history.back, por una cosa de estructura de página, el formulario queda en blanco, por eso necesito una solución de esa índole).

 

Saludos.

Link to comment
Share on other sites

con history.go(-1); que te sale

Pasa exactamente lo mismo, incluso probé con varios parámetros.

 

Insisto que solo en Google Ghrome no funciona.

 

http://www.google.com/support/forum/p/Chro...ec4d6&hl=en

http://www.sitepoint.com/forums/showthread.php?t=627807

http://groups.google.com/group/Google_Webm...fcaf84336bac983

 

A muchos les ha pasado el mismo problema.

 

 

Link to comment
Share on other sites

con history.go(-1); que te sale

Pasa exactamente lo mismo, incluso probé con varios parámetros.

 

Insisto que solo en Google Ghrome no funciona.

 

http://www.google.com/support/forum/p/Chro...ec4d6&hl=en

http://www.sitepoint.com/forums/showthread.php?t=627807

http://groups.google.com/group/Google_Webm...fcaf84336bac983

 

A muchos les ha pasado el mismo problema.

 

 

hacelo con php entonces

 

 

header("Location: pagina_anterior.php");

 

 

puedes casturar la pagina de donde venia con las variables SERVER

 

asi hace un post back atras o lo otro es con html puro

Link to comment
Share on other sites

A los <script> ponle nombre y apellido...

<script language="javascript" type="code/text">

 

Mmmhhhh... y ahora que recuerdo... parece que tuve un problema parecido... porqué no pruebas poniendo el alert y el back en una función y llamando a esa función desde un evento... onLoad por ejemplo...

 

De todas formas lo muevo a Webmaster... :)

 

Salu2.

Link to comment
Share on other sites

Para que esta página web pueda mostrarse correctamente se requieren los datos que has especificado anteriormente. Puedes enviar estos datos de nuevo, pero se repetirá cualquier acción que haya realizado la página anteriormente. Pulsa "Cargar de nuevo" para reenviar los datos y mostrar esta página

Este mensaje por lo general sale en cualquier navegador al intentar volver a una pagina a la cual accediste y le fue enviada informacion por el metodo POST, eso en realidad no se si sea un problema de chrome en realidad pero en en FF igual aparece un mensaje similar cuando intentas volver a cargar el una pagina a la que se le envio por metodo POST.

 

Ejemplo:

 

formulario.php --POST--> resultado.php --> otro.php

 

Cuando envias la pagina a resultado.php hubo un envio de informacion por metodo POST, si tu estando en resultado.php te aparecera ese mensaje que te dice que para cargar el sitio se debe reenviar la informacion que se envio antes, con lo que se voleria a realizar la misma accion, por ejemplo se duplicaria un comentario si es que eso era lo que hacia el form.

 

Ahora supongamos que ya estas en otra.php y por a,b,c motivos quieres volver atras, osea a resultado.php, esta ultima fue cargada luego de un envio POST, por lo que para volver a cargarla deberás reenviar la información de formulario.

 

Por lo que realmente en si no creo que sea un problema, solo que para como quieres que funcione deberas buscar una manera alternativa de hacerlo.

 

Se me ocurre que podrias hacer lo siguiente en el bloque donde colocas el java script:

 

<script>
  window.alert("Falta ingresar el RUT del cliente");
  location.url = <?php echo $_SERVER['HTTP_REFERER']; ?>;
</script>

Con eso se deberia redireccionar a la pagina anterior.

Link to comment
Share on other sites

Hola

 

Y porque haces la validacion asi?

 

Si haces una validacion con JS debes hacerla en la misma pagina del formulario, no en la que recibe los datos.

 

No te digo tambien lo horroroso que es mezclar JS con PHP.

 

 

Te dejo un plugin de Jquery -> http://bassistance.de/jquery-plugins/jquer...gin-validation/

Yo uso ese.

 

Saludos!

Link to comment
Share on other sites

Ahahaha si.

 

Lo que pasa es que nunca había usado javascript, y ahora recién estoy aprendiendo (solo, investigando en google).

 

Bueno, al final pude solucionarlo, declaré una variable, y le pasé todos los valores de las cajas y demases (onda $refrescar.="&nom_cl=".$cliente['rut_cl']; y le di más datos claro, incluyendo una windows.location.

 

Luego, en la valideación, lo puse de la siguiente forma (ejemplo):

 

if ($cliente['nombre_cl'] == "")
             {
                       echo '<script>'."\n";
                       echo ¡windows.alert("Falta ingresar ciudad del cliente");'."\n";
                       echo $refrescar;
                       echo '</script>';
              }

 

Y ahí funcionó.

 

Por cierto, muchas gracias por la ayuda, aprendí varias cosas con sus comentarios, y bueno, sé que es un tanto ortodoxo como lo hice, pero de a poco son este tipo de cosas las que hacen que uno aprenda y mejore.

 

Saludos.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...