【问题标题】:What happens if the action field in a <form> has parameters?如果 <form> 中的 action 字段有参数会发生什么?
【发布时间】:2010-10-18 10:58:20
【问题描述】:

如果我在 HTML 中做这样的事情,我是否可以期待得到良好支持的常见行为:

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

似乎这种事情本质上是荒谬的,但我已经看到它在这里和那里使用,我想知道地球上预期的行为应该是什么。浏览器是否足够聪明,可以将“&param2=whatever&param3=whatever”添加到操作中,还是他们只是输入第二个问号?要不然是啥?在某些情况下,这实际上是正确的做事方式吗?

【问题讨论】:

标签: html forms query-string


【解决方案1】:

如果方法属性设置为 GET,浏览器会在构造表单参数值之前从操作属性中删除查询字符串参数。

因此,在您的示例中,提交时对服务器的请求将如下所示:/somePage.html?param2=value&amp;param3=value

所以不,当方法是“GET”时,就像你的例子一样,没有理由这样做。

【讨论】:

  • 如果方法属性设置为 POST,那么两者都将被保留。对服务器的请求将在查询字符串中包含 param1=foo&param2=foo,并且 param2(具有不同的值)和 param3 作为发布的表单值。
  • @thomasrutter 非常正确!我认为这稍微超出了本次讨论的范围。有趣的部分是明显的碰撞。
  • @Rex - 我认为 GET 和 POST 的行为不同是很有趣的。这是我没想到的。有什么合乎逻辑的原因吗?
  • @CaptainAwesomePants - 根据定义,使用“GET”需要使用查询字符串。无风险处理它的最简单方法是先吹走任何东西。 POST 不需要查询字符串,因此无需删除它来腾出空间。
  • 如果输入字段中没有param2,是否还会先删除param2
【解决方案2】:

不确定,但我认为将这些变量放在隐藏的输入字段中会更好。这样,您的发布方法是 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>

【讨论】:

【解决方案3】:

您可以在发布表单之前使用脚本将表单中的方法属性更改为“POST”,以便在操作中使用查询字符串。不过,这似乎不是解决任何问题的最佳解决方案。

【讨论】:

    【解决方案4】:

    好吧,除了最后一个问题,所有问题都已回答,答案是肯定的。对于POST,这是允许的,但您很可能会发现它不起作用的情况。我见过 Web 服务器只允许 postdata or 查询字符串,所以它不可靠。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-27
      • 2012-01-13
      • 2019-07-05
      • 2011-08-24
      • 1970-01-01
      • 2012-04-14
      • 2011-12-25
      • 1970-01-01
      相关资源
      最近更新 更多