2009-04-09 10 views
34

Esiste un ben supportato, comportamento comune che posso aspettarmi se faccio qualcosa di simile in HTML:Cosa succede se il campo azione in un <form> ha parametri?

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

sembra che questo genere di cose è di per sé ridicolo, ma l'ho visto usato qui e lì e mi stavo chiedendo cosa diavolo dovrebbe essere il comportamento previsto. I browser sono abbastanza intelligenti da virare su "& param2 = qualunque sia & param3 = qualunque" all'azione, o si limitano a lanciare un secondo punto interrogativo? O cosa? Ci sono casi in cui questo è effettivamente il modo giusto di fare le cose?

+0

Se si utilizza Apache e hanno bisogno di risolvere il problema, [ci sono uno in un'altra risposta StackOverflow] [1] [1]: http://stackoverflow.com/questions/1116019/submitting-a- get-form-with-query-string-params-and-hidden-params-scompare/# 16415773 – wanis

risposta

52

Se l'attributo metodo è impostato su GET, il browser rilascia i parametri di querystring dall'attributo azione prima di costruire i valori dell'argomento modulo.

Quindi nel tuo esempio, la richiesta al server su presentare sarà simile: /somePage.html?param2=value&param3=value

Quindi no, quando il metodo è "GET", come nel tuo esempio, non c'è ragione per farlo.

+2

e se l'attributo del metodo fosse impostato su POST, allora entrambi sarebbero stati conservati. La richiesta al server avrebbe param1 = foo & param2 = foo sulla stringa di query e param2 (con valore diverso) e param3 come valori di modulo inviati. – thomasrutter

+0

@thomasrutter abbastanza bene! Penso che sia leggermente al di fuori dello scopo di questa discussione. La parte interessante è l'evidente collisione. –

+0

@Rex - Penso che sia affascinante il fatto che il comportamento sia diverso per GET e POST. Che non mi aspettavo. C'è una ragione logica per cui? –

17

Non sono sicuro, ma penso che sia meglio mettere tali variabili nei campi di input nascosti. In questo modo non importa se il tuo metodo di pubblicazione è 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

si potrebbe cambiare l'attributo di metodo nel modulo per "POST" con lo script prima di inviare il modulo, quindi ci potrebbe essere un uso per la stringa di query nell'azione. Però non sembra essere la soluzione migliore per niente.

3

Bene, a tutte le domande è stata data risposta tranne l'ultima, a cui la risposta è sì. Per POST, è consentito, ma potresti trovare casi in cui non funziona. Ho visto server Web che consentono solo postdata o querystring, quindi non è affidabile.

Problemi correlati