Convert JS Object to form data

前端 未结 18 1904
孤街浪徒
孤街浪徒 2020-11-29 17:22

How can I can convert my JS Object to FormData?

The reason why I want to do this is, I have an object that I constructed out of the ~100 form field valu

18条回答
  •  囚心锁ツ
    2020-11-29 17:49

    This function adds all data from object to FormData

    ES6 version from @developer033:

    function buildFormData(formData, data, parentKey) {
      if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {
        Object.keys(data).forEach(key => {
          buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key);
        });
      } else {
        const value = data == null ? '' : data;
    
        formData.append(parentKey, value);
      }
    }
    
    function jsonToFormData(data) {
      const formData = new FormData();
      
      buildFormData(formData, data);
      
      return formData;
    }
    
    const my_data = {
      num: 1,
      falseBool: false,
      trueBool: true,
      empty: '',
      und: undefined,
      nullable: null,
      date: new Date(),
      name: 'str',
      another_object: {
        name: 'my_name',
        value: 'whatever'
      },
      array: [
        {
          key1: {
            name: 'key1'
          }
        }
      ]
    };
    
    jsonToFormData(my_data)
    

    jQuery version:

    function appendFormdata(FormData, data, name){
        name = name || '';
        if (typeof data === 'object'){
            $.each(data, function(index, value){
                if (name == ''){
                    appendFormdata(FormData, value, index);
                } else {
                    appendFormdata(FormData, value, name + '['+index+']');
                }
            })
        } else {
            FormData.append(name, data);
        }
    }
    
    
    var formData = new FormData(),
        your_object = {
            name: 'test object',
            another_object: {
                name: 'and other objects',
                value: 'whatever'
            }
        };
    appendFormdata(formData, your_object); 
    

提交回复
热议问题