2010-06-04 16 views
15

La especificación HTTP dice que una solicitud POST puede contener un cuerpo arbitrario de datos.¿Cómo enviar datos en el cuerpo de solicitud HTTP cuando se utiliza un formulario HTML?

Un elemento HTML form puede PUBLICAR en una URL y puede contener input elementos, pero esos elementos input se convierten en una cadena de consulta.

¿Cómo puedo obtener un form para enviar también los datos en el cuerpo de la solicitud HTTP POST que envía cuando se presiona el botón Enviar?

Respuesta

4

Use javascript para enviar una solicitud de ajax cuando se presione el botón y cancele el envío del formulario. Los envíos de formularios siempre serán pares nombre/valor. XForms puede enviar datos personalizados, pero si esto es para uso público pasarán años antes de que XForms sea compatible con la mayoría de los navegadores en uso, si es que lo hace alguna vez.

+1

Si uso AJAX para hacer el POST, entonces el navegador no manejará automágicamente la respuesta HTTP, y yo quiero que lo haga. En otras palabras, estoy buscando una respuesta a la pregunta que no dependa de JavaScript, sino simplemente HTML. –

7

La especificación HTTP dice que una solicitud POST puede contener un cuerpo de datos arbitrario.

Correcto. Sin embargo, hay varias especificaciones del formato de esos datos. En el caso de formularios HTML, el más utilizado es application/x-www-form-urlencoded, seguido de multipart/form-data. Puede configurarlo a través del atributo enctype del elemento HTML <form>. Ver también el capítulo 17.13.4 Form Content Types de la especificación HTML.


Un elemento de formulario HTML Publicación de una URL y puede contener elementos de entrada, pero los elementos de entrada llegar a convertirse en una cadena de consulta.

Así es como funciona application/x-www-form-urlencoded. ¡Tenga en cuenta que esta cadena de consulta realmente representa todo el cuerpo de solicitud HTTP! Entonces, el cuerpo de la solicitud definitivamente no está vacío, como pareces pensar.


¿Cómo puedo obtener un formulario para enviar también a lo largo de los datos en el cuerpo de la petición HTTP POST que se envía cuando su botón de enviar se presiona?

De hecho, ya lo hace. Si intented para enviar una copia de la representación del árbol DOM HTML de la forma en sí misma, como algo dado a entender en la declaración anterior, entonces se puede lograr que con un poco de ayuda de JavaScript de la siguiente manera:

<form onsubmit="this.source.value=this.outerHTML"> 
    ... 
    <input type="hidden" name="source" /> 
    <input type="submit" /> 
</form> 

Todo el HTML La representación de árbol DOM del formulario está entonces en formato de cadena disponible como parámetro de solicitud con el nombre source.

Cuestiones relacionadas