JSON转FormData

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSON转FormData相关的知识,希望对你有一定的参考价值。

写项目以来一直写请求都是直接丢个json数据,天真的以为所有的ajax就是传json数据就好。直到遇到不配合的后端非让我传给他formData格式的数据。还一度怪人家不懂的变通,一点都不智能。其实还是自己见的太少,菜鸟遇到问题就是比较容易急躁呀。

贴个json转formdata的代码段吧。

function isObject(value) {
    return value === Object(value)
}

function isArray(value) {
    return Array.isArray(value)
}

function makeArrayKey(key) {
    if (key.length > 2 && key.lastIndexOf(‘[]‘) === key.length - 2) {
        return key
    } else {
        return key + ‘[]‘
    }
}

/**
 * 格式化
 * @param {*} obj 
 * @param {*} resultArr 
 * @param {*} pre 
 */
function objectToFormData(obj, resultArr, pre) {
    resultArr = resultArr || []
    Object.keys(obj).forEach(function (prop) {
        var key = pre ? (pre + ‘.‘ + prop) : prop
        if (isObject(obj[prop]) && !isArray(obj[prop])) {
            objectToFormData(obj[prop], resultArr, key)
        } else if (isArray(obj[prop])) {
            obj[prop].forEach(function (value, i) {
                var arrayKey = key + ‘[‘ + i + ‘]‘;
                if (isObject(value)) {
                    objectToFormData(value, resultArr, arrayKey)
                } else {
                    resultArr.push(arrayKey + "=" + value)
                }
            })
        } else {
            (obj[prop]!==""&&obj[prop]!==null) ? resultArr.push(key + "=" + obj[prop]) : null
        }
    })

    return resultArr.join("&")
}

 

以上是关于JSON转FormData的主要内容,如果未能解决你的问题,请参考以下文章

JSON转FormData

前端向后端发送请求(FormData)

实用代码片段将json数据绑定到html元素 (转)

Vue使用axios请求数据,默认post请求传参是json格式,但后台需要formData格式???

js obj对象转formdata格式代码

玩转图片上传————原生js XMLHttpRequest 结合FormData对象实现的图片上传