背景:前端将表单内容append到FormData对象,再转为Json传递到后端解析:
//formdata转为json
function formData2Json(formData) {
var jsonData = {};
for (var entry of formData.entries()) {
jsonData[entry[0]] = entry[1];
}
return JSON.stringify(jsonData);
}
但是报异常:
分析:遍历FormData中的数据方法entries,一般高版本浏览器能使用,如谷歌,火狐等,但在IE11及其以下版本中entries方法并不存在,而且FormData仅能使用 append 方法。但是Edge版本是正常的。如下图所示:
在网上查询了一堆资料后还是没找到简单有效的解决方法,我的思路是不用FormData来传递数据。
FormData方式:
//提交
submit() {
this.$refs["form"].validate((valid) => {
if (valid) {
let data = new FormData();
for (let key in this.form) {
data.append(`${key}`, this.form[key] === null ? '' : this.form[key]);
}
if (this.form.id) {
const id = this.form.id;
this.updateById({data, id}).then((res) => {
this.$notify.success({
title: '提示',
message: "操作成功"
});
this.dialogFormVisible = false
this.search();
});
}
}
})
},
改为传统方式:
//提交
submit() {
this.$refs["form"].validate((valid) => {
if (valid) {
let data={
sjqfsj: this.form.sjqfsj,
sjddsj: this.form.sjddsj,
hw: this.form.hw,
yj: this.form.yj,
xl: this.form.xl,
xljs: this.form.xljs,
cr: this.form.cr,
et: this.form.et,
ye: this.form.ye
};
if (this.form.id) {
const id = this.form.id;
this.updateById({data, id}).then((res) => {
this.$notify.success({
title: '提示',
message: "操作成功"
});
this.dialogFormVisible = false
this.search();
});
}
}
})
},
JSON.stringify将data转为json即可。如果大家有更好的方法请告知,谢谢。