【问题标题】:Many same input -> form to one request / many forms to many requests?许多相同的输入-> 一个请求的表单/多个请求的多个表单?
【发布时间】:2019-03-28 20:35:15
【问题描述】:

我正在处理<form>,它有多个<input> 组,具有相同的属性name='product-code'name='amount'(因为结构)。 为了更好地理解,例如:您可以选择一种特定产品的颜色和数量以添加到购物篮中的表格,但我想从目录中发送产品代码(因为该产品的每种颜色都是目录中的另一个项目)而不是发送颜色名称。 我试图理解它应该如何在语义上正确地完成和序列化。应该是一张表格和一个帖子请求还是多个表格和多个帖子请求?你有什么意见?

<form>
  <div>
    <input type="text" name="product-code" value="ST912600">
    <input type="number" name="amount" value="2">
  </div>
  <div>
    <input type="text" name="product-code" value="ST821806">
    <input type="number" name="amount" value="0">
  </div>
  <div>
    <input type="text" name="product-code" value="ST467165">
    <input type="number" name="amount" value="1">
  </div>
  <div>
    <input type="text" name="product-code" value="ST348499">
    <input type="number" name="amount" value="1">
  </div>
  <div>
    <input type="text" name="product-code" value="ST545081">
    <input type="number" name="amount" value="0">
  </div>
  <div>
    <input type="text" name="product-code" value="ST430287">
    <input type="number" name="amount" value="0">
  </div>
  <div>
    <input type="text" name="product-code" value="ST988144">
    <input type="number" name="amount" value="4">
  </div>
  <button type="submit">Send</button>
</form>

我希望服务器会将包含多个数据的请求解析为数组

【问题讨论】:

  • 您不应该对多个输入使用相同的名称,尝试使用后缀,如数字,并在发布到 API 之前在您的 JS 中对其进行迭代。
  • @DannyG 你能添加一个简短的例子来说明你的建议吗?

标签: javascript html forms semantic-markup


【解决方案1】:

您不能在form 标记中使用相同的名称。将您的表单可视化为关联数组。

name => value
name2 => value2

因此,如果您发送具有相同名称的表单,则会产生冲突。

但是您可以使用简单的形式,如您所愿更改name 属性并设置一个名为product-code 的类。 preventDefault 在您的提交按钮上带有 JS 并使用 getElementsByClassName 并获取他的值等。保存在一个数组中并使用 formElt.submit() 函数创建一个循环以逐个提交。

或者在 HTML 中创建很多表单。

【讨论】:

  • 是的,我试过这个(product-code2amount2product-code3amount3)。但我认为发送这种类型的 urlencoded 数据是一种不好的做法。如果我有 999 个产品的输入怎么办? product-code999?那么服务器端解析器代码的长度呢?
  • 你不需要使用像 product1,2,3 这样的增量列表。
  • 哦,看了那个建议后我的意思错了。我重读了一遍,现在我明白了。不过,我想对这个问题有更多的意见或观点
  • 对不起!此评论不是完整版!我按 Enter 快速大声笑,5 分钟后我忘记了编辑...
  • 我想说的是:您可以为您的所有子表单使用循环并使用 AJAX 逐一发送。或者您可以使用多种形式,但我认为第一个解决方案是最佳实践。
猜你喜欢
  • 2013-03-30
  • 1970-01-01
  • 2017-12-04
  • 2018-06-30
  • 2018-12-06
  • 2015-12-01
  • 2014-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多