2010-06-04 17 views
15

Le specifiche HTTP indicano che una richiesta POST può contenere un corpo di dati arbitrario.Come inviare dati nel corpo della richiesta HTTP quando si utilizza un modulo HTML?

Un elemento HTML form può inviare POST a un URL e può contenere elementi input, ma quegli elementi input diventano trasformati in una stringa di query.

Come è possibile ottenere un form per inviare anche i dati nel corpo della richiesta HTTP POST che invia quando viene premuto il pulsante di invio?

risposta

4

Utilizzare javascript per inviare una richiesta Ajax quando si preme il pulsante e annullare l'invio del modulo. I moduli inviati saranno sempre coppie nome/valore. XForms può inviare dati personalizzati, ma se questo è per uso pubblico ci vorranno anni prima che XForms sia supportato dalla maggior parte dei browser in uso, se mai.

+1

Se utilizzo AJAX per eseguire il POST, il browser non gestirà automaticamente la risposta HTTP e lo voglio. In altre parole, sto cercando una risposta alla domanda che non si basa su JavaScript, ma solo HTML. –

7

Le specifiche HTTP indicano che una richiesta POST può contenere un corpo di dati arbitrario.

Questo è corretto. Esistono tuttavia diverse specifiche del formato di tali dati. Nel caso di moduli HTML, il più comunemente usato è application/x-www-form-urlencoded, seguito da multipart/form-data. Puoi impostarlo tramite l'attributo enctype dell'elemento HTML <form>. Vedi anche il capitolo 17.13.4 Form Content Types della specifica HTML.


Un HTML elemento del form possono inviare a un URL e può contenere elementi di input, ma quegli elementi di input arrivare trasformato in una stringa di query.

È così che funziona application/x-www-form-urlencoded. Si noti che questa stringa di query rappresenta in realtà l'intero corpo della richiesta HTTP! Quindi il corpo della richiesta non è assolutamente vuoto, come sembri pensare.


Come posso ottenere un modulo per inviare i dati anche lungo nel corpo della richiesta HTTP POST che invia quando il suo pulsante di invio viene premuto?

In questo modo lo fa già. Se intented di inviare una copia della rappresentazione ad albero DOM HTML del modulo stesso, come un po 'accennato nella dichiarazione precedente, allora si può ottenere che, con un piccolo aiuto di JavaScript come segue:

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

L'intero HTML La rappresentazione dell'albero DOM del modulo è quindi in formato stringa disponibile come parametro di richiesta con nome source.

Problemi correlati