jQuery+formData 上传文件input file类型(单图或多图)实现ajax 传值到后台
最近开发网站时,发现 . p o s t 无法把表单文件类型的数据传到后台 ( 只能 .post无法把表单文件类型的数据传到后台(只能 .post无法把表单文件类型的数据传到后台(只能.ajax),这里做个记录整理,方便以后查询。
必须用 $.ajax(),举例以某商品表单信息为例
单图
<form id="deitForm" name="editForm">
<input id="goods-up-img" type="file" name="goods_up_img" />
</form>
多图
<form id="deitForm" name="editForm">
<input id="goods-up-img" type="file" name="goods_up_img" multiple />
</form>
console.log('goods_id',goods_id);
var form = document.getElementById('editForm');
var formdata = new FormData(form);
//如果不需要选择性传参,就直接formdata,给到后台就可以了,但是涉及到文件的,需要处理下
//单文件
var file=$("#goods-up-img")[0].files[0];
formdata.set('goods_up_img',files)
//多文件
var files=$("#goods-up-img")[0].files;
$.each(files,function(i,item){
formdata.set('goods_pic_img[]',files[i]);
})
//根据表单选择单文件或多文件
// js ajax提交ckeditor5内容需要手动获取一下
formdata.set('goods_desc',editor.getData());
//如果需要指定数据传到后台,则走下面new 一个空对象,把原表单的数据填进去
var newFormdata = new FormData();
newformdata.append('goods_desc', goods_desc);
newFormdata.append('goods_up_img',$("#goods-up-img")[0].files[0])
newFormdata.append('goods_id', goods_id);
// // formdata表单打印不能用console.log(formdata);
// newFormdata.forEach((value, key) => {
// console.log("%s: %s", key, value);
// })
$.ajax({
url: "{:url('admin/goods.goods/uploadFileJson')}",
type: "post",
dataType: "json",
cache: false,
processData: false,
contentType: false,
data: formdata,
success: function (res) {
//结果处理 比如回显
}
});