web-dev-qa-db-fra.com

Que se passe-t-il si le champ d'action dans un <form> a des paramètres?

Existe-t-il un comportement commun bien pris en charge auquel je peux m'attendre si je fais quelque chose comme ça en HTML:

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

On dirait que ce genre de chose est intrinsèquement ridicule, mais je l'ai vu utilisé ici et là et je me demandais quel devait être le comportement attendu sur Terre. Les navigateurs sont-ils assez intelligents pour clouer "& param2 = que ce soit & param3 = quoi que ce soit" à l'action, ou jettent-ils simplement un deuxième point d'interrogation? Ou quoi? Y a-t-il des cas où c'est en fait la bonne façon de faire les choses?

36

Si l'attribut de méthode est défini sur GET, le navigateur supprime les paramètres de chaîne de requête de l'attribut action avant de construire les valeurs d'argument de formulaire.

Ainsi, dans votre exemple, la demande au serveur lors de la soumission ressemblera à: /somePage.html?param2=value&param3=value

Donc non, lorsque la méthode est "GET", comme dans votre exemple, il n'y a aucune raison de le faire.

57
Rex M

Pas sûr, mais je pense qu'il est préférable de placer ces variables dans des champs de saisie cachés. De cette façon, peu importe si votre méthode de publication est POST ou 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>
20
Luke

Vous pouvez changer l'attribut de méthode dans le formulaire en "POST" avec un script avant de publier le formulaire, donc il pourrait y avoir une utilisation pour la chaîne de requête dans l'action. Cependant, cela ne semble guère être la meilleure solution.

4
Guffa

Eh bien, toutes les questions ont été répondues, sauf la dernière, à laquelle la réponse est oui. Pour POST, c'est autorisé, mais vous pouvez très bien trouver des cas où cela ne fonctionne pas. J'ai vu des serveurs Web qui n'autorisent que les postdonnées o chaîne de requête, donc ce n'est pas fiable.

3
Mark