2008-10-29 22 views
5

Cuando se envía un formulario web y lleva al usuario a otra página, con frecuencia el usuario hace clic en el botón Atrás para volver a enviar el formulario (el formulario es una búsqueda avanzada en mi caso.)Cómo se puede conservar el contenido del formulario web

¿Cómo puedo conservar de forma fiable las opciones de formulario seleccionadas por el usuario cuando hacen clic en Atrás (para que no tengan que empezar desde cero rellenando el formulario nuevamente si sólo cambian uno de los muchos elementos de formulario?)

¿Tengo que ir por la ruta de almacenar las opciones de formulario en datos de sesión (cookies o del lado del servidor) o hay una manera de que el navegador maneje esto para ¿yo?

(Medio Ambiente es PHP/Javascript - y el sitio debe trabajar en IE6 + y + Firefox2)

Respuesta

4

lo pondría en la sesión.
Va a ser el más confiable e incluso si no van directamente "hacia atrás", todavía tendrá sus opciones de búsqueda allí. Ponerlo en la cookie también funcionaría, pero no sería recomendable a menos que sea una forma muy pequeña.

6

Creo que estás a merced del navegador. Cuando devuelve el golpe, el navegador no realiza una nueva solicitud al servidor para el contenido, sino que utiliza el caché (en casi todos los navegadores que he visto). Así que cualquier cosa del lado del servidor está fuera.

Me pregunto si podría hacer algo muy complicado como almacenar el resultado de la búsqueda en una cookie durante el evento de descarga de la página de resultados y luego leer la cookie en javascript en la página de búsqueda y completar el formulario, pero esto es solo especulación, no sé si funcionaría.

+5

El lado del servidor no es necesariamente una opción, el JavaScript se ejecuta nuevamente para la página, por lo que podríamos hacer una solicitud de Ajax. –

+0

Eso es verdad. Me olvide de eso. –

2

El problema que tiene es que el navegador devolverá una versión en caché de la página, y probablemente no vuelva a pedirle al servidor, lo que significa que usar la sesión sería irrelevante.

Sin embargo, podría utilizar AJAX para cargar los detalles del formulario enviado anteriormente en el evento de carga de la página.

1

Básicamente deberá almacenarlo en su servidor de alguna manera (probablemente en variables de sesión, como se sugiere) después del POST. También debe configurar Javascript en la página del formulario para ejecutar load y emitir una llamada AJAX para obtener los datos de su servidor (por ejemplo, en formato JSON) y rellenar los campos del formulario con los datos.

código

Ejemplo jQuery:

$(document).ready(function() { 
    $.getJSON(
    "/getformdata.php", 
    function(data) { 
     $.each(data.items, function(i,item) { 
     $('#' + item.eid).val(item.val); 
     }); 
    }); 
}); 

Su /getformdata.php podría devolver datos como:

{ 
    'items': [ 
    { 
     'eid': 'formfield1', 
     'val': 'John', 
    }, 
    { 
     'eid': 'formfield2', 
     'val': 'Doe', 
    } 
    ] 
} 

y sería, obviamente, devolver una matriz vacía si no hubiera nada guardado todavía para la sesión. El código anterior es áspero y no probado, pero eso debería darte la idea básica.

Como nota al margen: las versiones actuales de Opera y Firefox conservarán el contenido del campo de formulario al volver. Su código JS sobrescribirá esto, pero eso debería ser seguro.

0

Otra opción ajaxy (por lo que no es bueno para usuarios sin javascript) es enviar el formulario a través de javascript y luego ir a la página de confirmación (o mostrar el mensaje en el formulario reemplazando el botón con un mensaje). De esa manera no hay "respaldo" posible.

0

¿Por qué no almacenar los valores en una cookie antes de enviar?También podría incluir una marca de tiempo o token para indicar cuándo se completó. Luego, cuando se carga la página, puede determinar si debe completar los campos con datos de la cookie, o simplemente dejarlos en blanco porque esta es una nueva búsqueda.

3

Depende del navegador, pero en la mayoría de los casos no tiene que hacer nada.

IE, Firefox, etc. Recordarán felizmente el contenido del formulario en la página anterior, y lo mostrarán de nuevo cuando se haga clic en Atrás ... siempre y cuando no haga nada para detener ese funcionamiento, como hacer que la página no sea un caché o crear el formulario completamente desde el script.

(Poniendo las cosas en la sesión es probable que confunda los navegadores con dos pestañas abiertas en el mismo formulario. Tenga mucho cuidado al hacer algo por el estilo.)

+0

La excepción es si la acción del formulario es una página https, creo (y posiblemente si la ubicación del formulario también es https). –

0

También puede hacer todo local mediante javascript. Así que almacena una cookie con el valor de búsqueda y en la carga de la página comprueba si la cookie existe. Algo como esto:

$('#formSubmitButton').click(function() { 
    var value = $('#searchbox').val(); 
    var days = 1; 
    var date = new Date(); 
    date.setTime(date.getTime()+(days*24*60*60*1000)); 
    var expires = "; expires="+date.toGMTString(); 
    document.cookie = "searchbox="+value+expires+"; path=/"; 
}); 

$(document).ready(function() { 
    var nameEQ = "searchbox="; 
    var ca = document.cookie.split(';'); 
    for(var i=0;i < ca.length;i++) { 
     var c = ca[i]; 
     while (c.charAt(0)==' ') c = c.substring(1,c.length); 
     if (c.indexOf(nameEQ) == 0) var valueC = c.substring(nameEQ.length,c.length); 
    } 
    $('#searchbox').val(valueC); 
}); 

No he probado esto, pero debería funcionar. Necesitarás jQuery para esto.

funciones de cookies vinieron de: http://www.quirksmode.org/js/cookies.html

debería decir por cierto que tanto en Firefox e IE tienen este comportamiento por defecto.

Cuestiones relacionadas