web-dev-qa-db-ja.com

<form>のアクションフィールドにパラメーターがある場合はどうなりますか?

HTMLで次のようなことを行う場合に期待できる、よくサポートされている一般的な動作はありますか。

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

この種のことは本質的にばかげているようですが、私はそれがあちこちで使われているのを見てきましたし、私は地球上で期待される行動がどうあるべきか疑問に思っていました。ブラウザは、アクションに「&param2 = whatever&param3 = whatever」を追加するのに十分スマートですか、それとも2番目の疑問符を投げるだけですか?または何?これが実際に正しい方法である場合はありますか?

36

メソッド属性がGETに設定されている場合、ブラウザはフォーム引数値を作成する前にアクション属性からクエリ文字列パラメーターを削除します。

したがって、あなたの例では、送信時のサーバーへのリクエストは次のようになります:/somePage.html?param2=value&param3=value

そのため、例のようにメソッドが「GET」の場合、これを行う理由はありません。

55
Rex M

確かではありませんが、これらの変数を非表示の入力フィールドに配置することをお勧めします。このように、投稿方法がPOSTまたは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

フォームを送信する前に、スクリプトでフォームのメソッド属性を「POST」に変更して、アクションでクエリ文字列を使用することができます。しかし、それは何に対しても最良の解決策とはほとんど思えません。

4
Guffa

さて、最後の質問を除き、すべての質問に答えました。答えはイエスです。 POSTの場合は許可されますが、機能しない場合があります。 postdata or querystringのみを許可するWebサーバーを見てきましたので、信頼できません。

3
Mark