【问题标题】:Is there a more concise way to POST a large number of input element values to an API?是否有更简洁的方式将大量输入元素值发布到 API?
【发布时间】:2019-07-28 00:55:18
【问题描述】:

我有一个 ASP.NET 项目,目前正在使用 JQuery 和 Bootstrap 创建前端。此前端的一部分涉及用户填写由 30 多个 input 元素组成的表单,然后需要将其提交给后端 API。

通常,如果我需要与 API 通信,我会使用 JQuery 内置的 post()post() 方法,并构造一个查询字符串以在这些方法中使用。

但是,由于有大量的input 元素与此表单相关联,我犹豫是否要使用这种特殊方法,因为将数据提交给 API 似乎是一种非常混乱和迂回的方式。

很遗憾,在这种特殊情况下,我无法使用通常的<input action="action.xx"> 方法,因此无法提交整个表单。

但是我真的不想在下面做这样的事情:

queryString = 
"?input1=" + $("#input1").val() + 
"&input2=" + $("#input2").val() ... //repeat for 30+ input elements

$.post(url + queryString, funtion(data){ ... });

肯定有更好的方法来解决这个特定问题,不涉及创建一个可恶的大字符串并通过 JQuery 的post 方法传递它?

【问题讨论】:

  • 我的第一个问题是为什么您要发送一个带有空白正文但有大量 GET 参数的 POST 请求?无论如何,这些输入的名称是什么?他们是否遵循inputX 的约定?他们有共同的班级吗?
  • @ChrisG 不确定我理解第一个问题的确切含义。它们有一个相对通用的 ID 命名约定,没有通用的类,但我可以相对容易地放入一个。
  • POST 请求的正文中有其查询字符串。您将它们放在 URL 中,这意味着它们是 GET 参数。您基本上需要$.post(url, queryString, ...),其中queryString 开头没有?
  • 您可以发送整个表单或自己填充对象。 肯定有更好的方法来解决这个特定问题不,不是真的。如果您想做一些不标准的事情,那么您必须自己编写!
  • @ChrisG 啊,抱歉。不,你是对的,它们是通过身体发送的,在我写这个问题时没想到

标签: javascript jquery asp.net api


【解决方案1】:

给每个输入一个name 属性,而不是(与查询字符串相同的名称),然后在表单上调用.serialize() 以生成查询字符串:

$('form').on('submit', function(e) {
  e.preventDefault();
  console.log($(this).serialize());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form>
<input name="inp1">
<input name="inp2">
<input name="inp3">
<button>submit</button>
</form>

或者,如果你不能这样做,并且你想要一种比你现在使用的更短、更不容易出错的方式来生成字符串,那么迭代一个选择器数组并获取每个选择器的.val(),然后通过&amp;s 加入:

const ids = ['input1', 'input2', 'input3'];
const queryString = ids.map(id => $('#' + id).val()).join('&');

【讨论】:

  • 我想发布这个但 OP 说 so submitting the form as a whole is not a possibility(如果他的意思是“我必须使用 AJAX”那么这显然是解决方案)
  • 没有 AJAX 绝对是一个选项,我只是说使用普通的action 属性来提交表单不是一个选项。
  • @Jake12342134 您可以使用 Javascript 序列化表单并将其提交到您想要的任何 URL(例如使用您的 $.post) - 您不受 action 属性(或缺少该属性)的限制在表单元素上。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2022-01-24
  • 2016-11-30
  • 2011-04-01
  • 2020-11-12
相关资源
最近更新 更多