复杂JSON转FormData

项目迁移后使用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

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值