【问题标题】:Form submission with a ?key=val query string already in the action attribute ignores that query string在 action 属性中已有 ?key=val 查询字符串的表单提交会忽略该查询字符串
【发布时间】:2020-07-29 13:23:31
【问题描述】:

所以我尝试向自身提交一个页面,同时保留页面的当前查询字符串。

所以页面是sb.local/sb/cat.php?brandcode=JM&t=cat_items 我拉出查询字符串并将其粘贴回 html 表单以保留参数。这是生成的表单:

<form id="brand-select" method="get" action="?brandcode=JM&t=cat_items" name="brand-select">
Brand:
<select id="brandcode" style="width:207px" tabindex="3" name="brandcode" required="">
<option value=""></option>
<option class="brand-option" value="AX" data-brandid="110"> Aetrex </option>
<option class="brand-option" value="AL" data-brandid="12"> Alden </option>
<option class="brand-option" value="ETC" data-brandid="11"> Etc </option>
</select>
<input type="submit" value="go">
</form>

但是,当我通过选择 Aetrex(值 AX)的下拉列表来提交表单时,它会转到以下网址:

sb.local/sb/cat.php?brandcode=AX 换句话说,它会删除动作中的“t=cat_items”。它还删除了“brandcode=JM”,但我几乎可以预料到,因为它们是重复的。

这不是我所期望的,我希望如果 action 属性中有一个查询字符串,它会将表单值附加到该查询字符串(例如sb.local/sb/cat.php?brandcode=JM&amp;t=cat_items&amp;brandcode=AX。相反,它似乎完全替换了查询字符串表单中的那些元素。

表单操作属性是否不能用于存储查询参数,只能用于存储更基本的 url 信息?

编辑:请注意,我可以通过解析每个参数然后手动将每个参数放入其自己的隐藏字段来解决此问题,除了我想允许更改的任何参数,我只是希望有某种更简单的方法。
我用一个不冲突的查询字符串进行了测试,即使没有冲突(在 Firefox 中),它也被整个替换了,所以基于此,查询字符串在 get 表单的 action 属性中似乎没有用?或者我错过了什么。

【问题讨论】:

标签: forms


【解决方案1】:

我知道这是一个老问题,但解决方案实际上非常简单(而且很简洁!)。

您所要做的就是发送带有隐藏输入字段的查询字符串,格式为name="key"value="value"

?brandcode=JM&t=cat_items 会“翻译”成:

<input type="hidden" name="brandcode" value="JM" />
<input type="hidden" name="t" value="cat_items" />

从您的action 中完全删除查询字符串。

【讨论】:

  • 正如我在问题底部提到的,我知道手动解决方案,但它需要解析所有 url 参数及其值,然后过滤掉更改的特定参数 [这是出现困难的地方],然后在表单中循环它们以将它们放入隐藏的输入中。
  • 是的,这就是我今天要做的事情,或者如果我真的想要稳定的访问,可以通过漂亮的 url slugs。
  • 其实这并不是很难生成。只需遍历 $_GET(用于 php)或 Request.QueryString(用于 VBScript/VB.Net)并将所有键和值作为隐藏输入输出。
【解决方案2】:

将您的代码更改为:

<div>
    <form action="?brandcode=&t="   method="get">
    ....
    </form>

【讨论】:

    【解决方案3】:

    如果方法无关紧要,您可以使用“POST”方法而不是“GET”方法提交表单。

    【讨论】:

    • 嗯,注意到了。在这种情况下,我试图使用 get 来获得最大的透明度(每次更改都会获得相应的 url 更改),但也许这种断开连接是因为我通过将表单设置为 get 表单来有点滥用使用表单的正常方法......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多