【发布时间】:2012-12-25 08:31:37
【问题描述】:
您好,我正在尝试使用 Validate 的 submitHandler 中的 ajax 提交表单,同时还使用了美化多个选择的 Chosen 库。以下作品:
submitHandler: function(form) {
var form = $(this.currentForm);
var data = {
first_name : form.find('#first_name').attr('value'),
last_name : form.find('#last_name').attr('value'),
chosen_people : form.find('#chosen_people').val(),
};
$.ajax({
type : "POST",
url : "formhandler.php",
data : data,
success : function(response) {
console.log(response);
}
});
}
服务器响应:
array(
['first_name'] => 'John'
['last_name'] => 'Smith'
['chosen_people'] => array(
[0] => 37
[1] => 42
)
)
问题是我的表单很大并且经常更改,我不想继续枚举所有输入和选择元素。我只想说:
var inputs = form.find('input').serializeArray();
var selects = form.find('.chzn-select').val();
var data = $.merge(inputs, selects );
...
我已经尝试过各种手动输入的组合,例如:
for(var select in selects)
selects[select] = {'name' : select, 'value' : selects[select]};
var serializedSelects = {'name' : 'chosen_people', 'value' : selects };
var data = $.merge(inputs, serializedSelects);
但我无法让数组正确嵌套,以便服务器在其 post 变量中具有正确的数组结构。
问题的要点是,尽管 jQuery 为元素提供了 $.serializeArray(),但它没有提供类似 $.paramArray() 的东西来获取关联数组并将其转换为序列化数组。它只能输出序列化的字符串,很难进一步操作。我不想包含另一个 ajax 框架,所以希望有一个简单的解决方案。
附:我正在使用 php5 和 jQuery 1.8.3。这是我到目前为止发现的,也许我只是在尝试添加它之前弄乱了选择数组的格式:
jQuery post() with serialize and extra data
How to serialize a JavaScript associative array?
Jquery.SerializeArray how to add more parameters to it?
谢谢!
【问题讨论】:
-
你为什么不直接做
form.serializeArray()? -
您是要获取表单中所有元素的值,还是仅获取一些?
标签: jquery ajax nested associative-array serializearray