Pregunta

Tengo un par de formularios de búsqueda, 1 con ~ 50 campos y el otro con ~ 100. Por lo general, como dice la especificación HTML, realizo búsquedas utilizando el método GET ya que no se modifican los datos. Todavía no me he encontrado con este problema, pero me pregunto si pronto me quedaré sin espacio para URL.

El límite de Internet Explorer es de 2083 caracteres. Otros navegadores tienen un límite mucho más alto . Estoy ejecutando Apache, por lo que el límite es de alrededor de 4000 caracteres, que IIS es de 16384 caracteres.

En 100 campos, digamos la longitud promedio del nombre del campo de 10 caracteres, eso ya es de 5000 caracteres ... increíble en el formulario de 100 campos, todavía no he tenido ningún error. (El 25% de los campos son selecciones múltiples, por lo que la longitud del campo es mucho más larga).

Entonces, me pregunto cuáles son mis opciones. (Acortar los formularios no es una opción). Aquí mis ideas:

  • Usar POST. No me gusta tanto porque en este momento los usuarios pueden marcar sus búsquedas y realizarlas nuevamente más tarde, una característica realmente agradable.
  • Haga que JavaScript recorra el formulario para determinar qué campos son diferentes a los predeterminados, complete otro formulario y envíelo. El usuario, por supuesto, marcaría la versión abreviada.

¿Alguna otra idea?

Además, ¿alguien sabe si la longitud es la longitud codificada o solo texto sin formato?

Estoy desarrollando en PHP, pero probablemente no haga la diferencia.

Editar: no puedo eliminar ningún campo; No puedo acortar el formulario. Esto es lo que ha pedido el cliente y, a menudo, utilizan una variedad de campos en las diferentes categorías. Sé que es difícil pensar en un formulario que se vea bien con tantos campos, pero los usuarios no tienen problemas para entender cómo funciona.

¿Fue útil?

Solución

¿Sus usuarios realmente utilizarán todos los campos 50-100 para hacer sus búsquedas? Si solo usan unos pocos, ¿por qué no PUBLICAR la búsqueda en un " entre " página ¿qué encabezado (): los redirige a la página de resultados con solo los campos modificados por el usuario en la URL? La página de resultados usaría los valores predeterminados para los campos que no existen en la URL.

Otros consejos

Para abordar indirectamente su pregunta, si me enfrentara a un formulario de 100 campos para completar en una página, lo más probable es que cierre mi navegador, parece una pesadilla de usabilidad completa .

Mi respuesta es, si existe el peligro de que esté cerca de ese límite para el uso normal del formulario, probablemente lo estoy haciendo mal.

En orden de preferencia, lo haría

  1. Divida el formulario y use alguna retención del estado del lado del servidor
  2. Cambie a POST, y luego genere y redirija a una URL más corta en POST que resolvió el mismo resultado
  3. Renunciar;)

Usted menciona en un comentario que muchos de los campos "están ocultos y se pueden abrir según sea necesario".

Si está dispuesto a descartar una degradación elegante, siempre puede agregar y eliminar los campos del formulario, en lugar de ocultarlos y mostrarlos: el navegador no enviará los que no están incluidos en el formulario.

Esta es una variante de la "Marca y modelo" formularios que utilizan las páginas de seguros en línea, etc. - seleccione la marca, envíela al servidor y obtenga la lista de modelos para ese fabricante.

Si no le importa usar javascript, puede hacer que calcule la longitud de la cadena de consulta y, si es demasiado larga, cambie a una publicación. Luego, tenga algún tipo de mapeador de URL para permitirles marcar estas búsquedas publicadas.

Use la publicación y si el usuario marca la búsqueda, guárdela en una base de datos y dele un token único, luego redirija a la página de búsqueda usando GET y pase el token como parámetro.

TinyURL es un buen ejemplo: le das una URL muy larga, la guarda en una base de datos, te da un identificador único para esa URL y luego puedes solicitar la URL larga usando ese identificador.

En PHP sería algo parecido a:

<?php
if (isset(

Use la publicación y si el usuario marca la búsqueda, guárdela en una base de datos y dele un token único, luego redirija a la página de búsqueda usando GET y pase el token como parámetro.

TinyURL es un buen ejemplo: le das una URL muy larga, la guarda en una base de datos, te da un identificador único para esa URL y luego puedes solicitar la URL larga usando ese identificador.

En PHP sería algo parecido a:

<?php
mysql_query('DELETE FROM searches WHERE save_time < DATE_ADD(NOW(), INTERVAL -200 DAY)');
?>

Y ejecuta un script diariamente:

<*>GET['token'])) { $token = addslashes(

Use la publicación y si el usuario marca la búsqueda, guárdela en una base de datos y dele un token único, luego redirija a la página de búsqueda usando GET y pase el token como parámetro.

TinyURL es un buen ejemplo: le das una URL muy larga, la guarda en una base de datos, te da un identificador único para esa URL y luego puedes solicitar la URL larga usando ese identificador.

En PHP sería algo parecido a:

<*>

Y ejecuta un script diariamente:

<*>GET['token']); $qry = mysql_query("SELECT fields FROM searches WHERE token = '{$token}'"); if ($row = mysql_fetch_assoc($qry)) { performSearch(unserialize($row['fields'])); exit; } showError('Your saved search has been removed because it hasn\'t been used in a while'); exit; } $fields = addslashes(serialize(

Use la publicación y si el usuario marca la búsqueda, guárdela en una base de datos y dele un token único, luego redirija a la página de búsqueda usando GET y pase el token como parámetro.

TinyURL es un buen ejemplo: le das una URL muy larga, la guarda en una base de datos, te da un identificador único para esa URL y luego puedes solicitar la URL larga usando ese identificador.

En PHP sería algo parecido a:

<*>

Y ejecuta un script diariamente:

<*>POST)); $token = sha1(

Use la publicación y si el usuario marca la búsqueda, guárdela en una base de datos y dele un token único, luego redirija a la página de búsqueda usando GET y pase el token como parámetro.

TinyURL es un buen ejemplo: le das una URL muy larga, la guarda en una base de datos, te da un identificador único para esa URL y luego puedes solicitar la URL larga usando ese identificador.

En PHP sería algo parecido a:

<*>

Y ejecuta un script diariamente:

<*>SERVER['REMOTE_ADDR'].rand()); mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())"); header('Location: ?token='.$token); exit; ?>

Y ejecuta un script diariamente:

<*>
  

Además, ¿alguien sabe si la longitud   Cuál es la longitud codificada o simplemente texto sin formato?

Mi suposición fue para la longitud codificada. Hice una prueba simple: un área de texto y un botón de enviar a un script PHP simplista.
Cargué la página en IE6, pegué texto en francés en el área de texto, 2000 caracteres. Si presiono el botón Enviar, nada. Tuve que reducir la longitud del texto para poder enviar.

En otras palabras, el límite de 2083 caracteres es exactamente la longitud máxima de la URL que se encuentra en la barra de direcciones después de enviar la solicitud GET.

Buscaría la solución de JavaScript: al enviar, analizar el formulario, crear un formulario secundario con los atributos ocultos y enviarlo.

Algunas estrategias para acortar el resultado:

  • Como señala, ya puede omitir todos los valores que quedan por defecto (sin campo, sin valor).
  • Si tiene un formulario como el de Procesando búsqueda en el foro puede agrupar todos los estados de casillas de verificación en una sola variable, por ejemplo. usando codificación de letras.
  • Utilice atributos cortos de value (en select por ejemplo).

Nota: si la página de búsqueda está compuesta de varios formularios independientes, donde los usuarios solo llenan una sección u otra, puede hacer varios formularios por separado.
Podría no aplicarse a su caso y puede parecer obvio, pero vale la pena mencionarlo para el registro ... ^ _ ^

Uno podría mirar filosóficamente el POST de envío de búsqueda como la creación de una búsqueda guardada (especialmente cuando una búsqueda es un objeto tan complejo como el que están haciendo sus usuarios). En este caso, podría aceptar la publicación para la creación de una búsqueda y luego redirigir usando un GET para obtener los resultados de búsqueda apropiados (publicación / redirección / obtención).

Esto también permitiría a los usuarios marcar los resultados de búsqueda (GET) para volver en cualquier momento para volver a ejecutar la búsqueda.

Obtener puede tener una ventaja si sus resultados de búsqueda se pueden compartir, en caso de una solicitud posterior si envía el enlace a alguien, esa persona no verá ningún resultado de búsqueda

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