2009-04-09 11 views
34

¿Existe un comportamiento bien apoyado, común que puedo esperar si hago algo como esto en HTML:¿Qué sucede si el campo de acción en un <form> tiene parámetros?

<form method="get" action="/somePage.html?param1=foo&param2=foo"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
</form> 

parece que este tipo de cosas es de por sí ridícula, pero he visto que se usa aquí y allí y me preguntaba qué diablos debería ser el comportamiento esperado. ¿Los navegadores son lo suficientemente inteligentes como para agregar "& param2 = lo que sea & param3 = lo que sea" a la acción, o simplemente agregan un segundo signo de interrogación? ¿O que? ¿Hay casos en los que esta sea la forma correcta de hacer las cosas?

+0

Si está usando Apache y necesitan solución, [hay una en otra respuesta stackoverflow] [1] [1]: http://stackoverflow.com/questions/1116019/submitting-a- get-form-with-query-string-params-and-hidden-params-disappear/# 16415773 – wanis

Respuesta

52

Si el atributo de método se establece en GET, el navegador descarta los parámetros de la cadena de consulta del atributo de acción antes de construir los valores del argumento de formulario.

Así que en tu ejemplo, la solicitud al servidor en el presente será parecida: /somePage.html?param2=value&param3=value

Así que no, cuando el método es "GET", como en el ejemplo, no hay razón para hacer esto.

+2

y si el atributo de método se estableció en POST, se conservarán ambos. La solicitud al servidor tendría param1 = foo & param2 = foo en la cadena de consulta, y param2 (con diferente valor) y param3 como valores de formulario publicados. – thomasrutter

+0

@thomasrutter bastante bien! Creo que eso está un poco fuera del alcance de esta discusión. La parte interesante es la colisión obvia. –

+0

@Rex - Creo que es fascinante que el comportamiento sea diferente para GET y POST. Eso no esperaba. ¿Hay una razón lógica por qué? –

17

No estoy seguro, pero creo que es una mejor práctica colocar esas variables en campos de entrada ocultos. De esta forma, no importa si su método de publicación es POST o GET.

<form method="get" action="/somePage.html"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
    <input type="hidden" name="param1" value="foo" /> 
    <input type="hidden" name="param2" value="foo" /> 
</form> 
4

podría cambiar el atributo del método en forma de "POST" con la escritura antes de publicar el formulario, por lo que podría ser un uso para la cadena de consulta en la acción. Sin embargo, difícilmente parece ser la mejor solución para nada.

3

Bien, todas las preguntas han sido respondidas excepto la última, a la que la respuesta es sí. Para POST, está permitido, pero es posible que encuentre casos en los que no funciona. He visto servidores web que solo permiten postdata o querystring, por lo que no es confiable.

Cuestiones relacionadas