项目迁移后使用axios发送ajax请求,但它的默认数据格式是payload,之前老项目使用使用jquery数据格式是FormData,项目服务端只能接收FormData格式的,所以只能想办法修改axios的数据格式,查了一些资料没发现通过配置解决的办法 ,有的人说加下面一段代码即可:
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';
测试多次无效果,又有人说直接把 数据改为FormData,于是继续找 json转FormData的方法,找到了好多,不过都是只支持一层json,复杂些的不支持,于是自己动手写一个转换的方法:
/*
复杂json转为FormData
parent:key值,data:数据值,form:FormData实例
使用:JsonToFormData("", a, null);
*/
function JsonToFormData(parent, data, form) {
form = form || new FormData();
//循环传入的值转换formData
let index = 0;
Object.keys(data).forEach((key) => {
let val = data[key];
// console.log(key, typeof val, val.length);
if (val == null) {
let pk = parent ? `${parent}[${key}]` : key;
form.append(pk, NVL(val, ""));
}
else if (typeof val === "object") {
if (val.length == 0) { }
else if (val.length >= 1) {
//数组
let pk = parent ? `${parent}[${key}]` : key;
JsonToFormData(pk, val, form);
} else {
//纯对象
let pk = parent ? `${parent}[${key}]` : key;
JsonToFormData(pk, val, form);
}
} else {
let pk = parent ? `${parent}[${key}]` : key;
form.append(pk, NVL(val, ""));
}
index++;
});
if (parent == "") return form;
}
function NVL(obj, newValue) {
return (obj === null || obj === undefined) ?
(newValue ? newValue : "") : obj;
}
使用方法:
var params = {
a: 1, b: "", c: [1, 2, 4, {c1:"c111"}], d: { e: 5 }, f: [{ f1: "11" }, { f1: "22" }]
};
//使用
var r = JsonToFormData("",params, null);
//打印转换后的结果
for (var [key, value] of r) {
console.log(key, value);
}
结果:
a 1
b
c[0] 1
c[1] 2
c[2] 4
c[3][c1] c111
d[e] 5
f[0][f1] 11
f[1][f1] 22
如果您有更好的办法把axios的数据格式转为FormData,请共享一下,谢谢!邮箱:31705252@qq.com