【发布时间】:2018-08-17 15:35:30
【问题描述】:
我正在使用 jquery 的 POST api (https://api.jquery.com/jquery.post/) 将一些表单数据发送到我的服务器。当服务器解析请求时,其中一个字段的名称中添加了方括号,例如。 foo 变为 foo[]。这破坏了服务器上的表单处理。怎么回事?
【问题讨论】:
我正在使用 jquery 的 POST api (https://api.jquery.com/jquery.post/) 将一些表单数据发送到我的服务器。当服务器解析请求时,其中一个字段的名称中添加了方括号,例如。 foo 变为 foo[]。这破坏了服务器上的表单处理。怎么回事?
【问题讨论】:
当您发送多个输入具有相同名称的数组或表单时,jquery 会添加方括号。
通过简单的重复例如在 url 编码数据中发送重复的参数是完全有效的。 foo=bar&foo=baz&foo=qux 是发送到服务器的有效内容。大多数服务器会将其解析为一个名为 foo 的变量,其中包含一组值。
为了使 jquery 行为“正确”(即发送带有实际名称的字段),需要在请求中添加 {traditional: true} 选项。
例如:
let data = {foo: ['bar', 'baz', 'quz']};
$.post({url:'/myurl', data: data, traditional: true, success: onSuccess});
我承认对 jquery 默默重命名字段的决定感到困惑 - 这可能会浪费大量时间(就像对我一样)尝试调试神秘错误。
【讨论】: