将额外的数据添加到$form.serialize() ajax提交中?

10

我有以下代码片段,其中我正在将表单数据序列化并通过ajax进行发布。 我遇到了需要添加其他数据的情况。 在这种情况下,我需要添加一个逗号分隔的数组,称为“selectedHours”。 是否可能实现?

我通过如下方式创建“selectedHours”,它创建一个具有类“hour-selected”的列表项数组。 在此方面未使用任何表单值,输入等。

var selectedHours = [];
$('.hour-selected').each(function(k,v) {
    selectedHours.push($(v).text());
});

$.ajax({ 
    type: 'post',
    url: '/process/somepage.php',
    data: $form.serialize(),
    dataType : 'json'
}).done(function (response) {
... and so on...
2个回答

21

试试这个:

$.ajax({ 
    type: 'post',
    url: '/process/somepage.php',
    data: $form.serialize() + '&hours=' + JSON.stringify(selectedHours),
    dataType : 'json'
}).done(function (response) {
... and so on...

发送的数据只是一个URL编码的字符串。您可以通过简单的连接附加其他值。


1
我从未想过它是那么简单的...通过ajax学到了更多...谢谢!JSON.stringify是必要的吗?例如,selectedHours已经返回1pm、4pm、11pm。 - user756659
很高兴能帮助你 :) @user756659 - Alessandro Minoccheri

4
也许更好的解决方案是使用jQuery的serializeArray,正如这个答案所建议的那样:
var data = $form.serializeArray();
data.push({name: 'hours', value: selectedHours});

$.post('/process/somepage.php', data).done(doSomething);

这个解决方案可能更好,因为它避免了手动构造序列化的数据字符串,而是选择将数据传递给jQuery处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接