【发布时间】:2017-05-14 23:19:55
【问题描述】:
我有一个包含多个多选字段的表单。每个选择都有一个唯一的 ID,并相应地命名:
values[foobar1][]
values[foobar2][]
values[foobar3][]
... etc.
此表单可能包含数百个这样的字段,因此由 ajax 分页。其结果是无法保证所有记录都会在前端立即可用。因此,我不可能提交整个表格。但是,我确实可以访问服务器端的整个记录列表。
我对此的解决方案是观察表单字段的变化,并且对于每个发生变化的字段,将值存储在一个数组中以仅跟踪更改的字段值。因此,如果您仅更改 foobar2,则发送到服务器的结果序列化数组将如下所示:
0: Object {
name: "values[foobar2][]"
value: "thevalue1"
},
1: Object {
name: "values[foobar2][]"
value: "thevalue3"
}
So this works fine except for, as you may have guessed, when the select multiple is emptied.无论我使用什么格式来存储更改的值,无论是每个字段的 arraySerialization 还是作为关联数组,当我将数组传递给 $.param() 以进行 ajax 请求时,生成的序列化字符串都不包含空值的痕迹.所以服务器无法判断该值已被清空。
任何人都可以提出一种将数据传递到服务器以使 empt(ied) 数组保持完整的方法,或者另一种处理初始问题的方法。
提前致谢!
【问题讨论】:
-
您是否还可以沿
<input type="hidden" name="the name of the field here" />的行添加隐藏输入,然后您可以检查数组中是否存在这些值,如果它们不存在,则它们为空。每个选择菜单都有一个隐藏的输入 -
这似乎是最简单的解决方案。我想与其使用硬编码的隐藏字段,不如只传递一个带有字段值的更改字段键的辅助数组。听起来像我要走的路线!
标签: javascript php jquery arrays ajax