如何将数组值添加到新的FormData中?

12
在表单提交时,我使用jQuery来收集数据,其中包括文件,并使用以下方式创建包含表单值的FormData对象:
var formData = new FormData($("form#formid")[0]);

但是我该如何向这个FormData对象添加另一个值及其键?


@Esailija 我需要获取包括FILES在内的表单内容以便通过ajax进行提交,我认为serialize()无法处理文件? - Dan
我有些困惑,因为你说了“数组”。我把它修改成我认为你要的样子了。 - Esailija
5个回答

22

2
您可以轻松地遍历表单中的所有字段并将它们添加到 FormData 中,方法如下:
var formData = new FormData();
$("form#edit-account").serializeArray().forEach(function(field) {
  formData.append(field.name, field.value)
});​

2

你也可以使用FormData.set()

FormData.set和append()的区别在于,如果指定的键已经存在,FormData.set将用新值覆盖所有现有的值,而append()将把新值添加到现有值集的末尾。

语法

formData.set(name, value);

1
var data = new FormData(),
    fields = $("#myForm").serializeArray();

$.each( fields, function( i, field ) {
    data.append(field.name, field.value);
});

1
$( 'form' ).submit(function ( e ) {
var data;

data = new FormData();
data.append( 'file', $( '#file' )[0].files[0] );

$.ajax({
    url: 'http://hacheck.tel.fer.hr/xml.pl',
    data: data,
    processData: false,
    type: 'POST',
    success: function ( data ) {
        alert( data );
    }
});

e.preventDefault();

});


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