【发布时间】:2016-09-30 16:42:01
【问题描述】:
我有一个用于发送邮件的表单。它包含诸如 to_name,subject,message and attachment button 之类的字段。我将在单击类为 .file_add_btn 的按钮时创建一个文件输入字段。
//click event for add files
$(".file_add_btn").click(function(){
if($("#file_div").html() == '')
{
$("#file_div").append('<div class="file_btn_div" id="file_btn_div_first"><input type="file" class="btn_browse" name="file_uploads[]">'+
'<input type="button" class="del_file" value="X"></div>');
}
else
{
if($(document).find('.btn_browse:last').get(0).files.length !==0)
{
$("#file_div").append('<div class="file_btn_div"><input type="file" class="btn_browse" name="file_uploads[]">'+
'<input type="button" class="del_file" value="X"></div>');
}
}
});
我编写了以下函数来将文件输入包含到 formData 中。
$.fn.serializefiles = function() {
var obj = $(this);
var form_data = new FormData(this[0]);
$.each($(obj).find('.btn_browse'), function(i, tag) {
$.each(tag.files, function(i, file) {
console.log(tag.name+' '+file.name)//this is printing in console
form_data.append(tag.name, file);
});
});
var params = $(obj).serializeArray();
$.each(params, function (i, val) {
console.log(val.name+'<br/>');
console.log(val.value+'<br/>');
**//here file names are not coming.All other elements are coming.They are not adding to form_data object**
form_data.append(val.name, val.value);
});
return form_data;
};
我的 ajax 调用如下:
$.ajax({
type: "POST",
url: 'process.php',
data: $("#compose_message").serializefiles() ,//formID=#compose_message
asyn: true,
cache: false,
processData: false,
contentType: false,
success:function()
....
我无法将输入附加到 form_data 对象中。在控制台中,我在按钮点击后的 POST 中看到 [object FormData]。
【问题讨论】:
-
我很困惑为什么你需要这个
serializefiles函数,而你应该能够简单地做data: new FormData($("#compose_message")[0])? -
如果我们做
data: new FormData($("#compose_message")[0]),我如何附加多个文件输入和其他formdatas@Mikey -
@Mikey 我用过
console.log(JSON.stringify(new FormData($("#compose_message")[0])));,这在控制台中给了我空值{}。
标签: php jquery ajax forms file