【问题标题】:How to append different types of form inputs to formData()?如何将不同类型的表单输入附加到 formData()?
【发布时间】:2021-09-28 21:48:37
【问题描述】:

我的表单包含多种输入类型(filenumbertext 等),而一些文件输入有 multipleattribute,而有些则没有。所以问题是如何将所有这些不同的类型附加到 formData() 而无需逐个附加每个输入?实际上,我正在考虑将它与我的所有表单一起使用的功能。

【问题讨论】:

标签: javascript vue.js vuejs2 axios


【解决方案1】:

这是一个适用于所有类型输入类型(文件 [单个和多个]、文本、数字等)的解决方案: formData 是包含我们表单数据的对象。例如我稍后填充数据的空对象:

formData : {
  first_name: null,
  last_name: null,
  image: null,
  thumbnails: [],
}
let formData = new FormData()
for(let key in this.formData) {
   if(typeof(this.formData[key]) === 'object') {
      if(this.formData[key].length) {
         for (let subKey in this.formData[key]) {
            formData.append(`${key}[]`, this.formData[key][subKey]);
         }
      } else {
         formData.append(key, this.formData[key]);
      }
   }
   else {
      formData.append(key, this.formData[key]);
   }
}
this.$axios.$post(url, formData, {
   headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
   }
}).then((response) => {
    // ...
}).catch((error) => {
   // ...
})

【讨论】:

    【解决方案2】:

    一个简单的例子

    // data: {a:1,b:'2',c:[1,2,'3'],d: {a:1, b:3}, files:[]}
    // data will be converted to FormData
    const toFormData = data => {
      if (data instanceof FormData) return data
      const fd = new FormData()
      data &&
        Object.keys(data).forEach(key => {
          const val = data[key]
          switch (typeof val) {
            case 'string':
              val && fd.append(key, val)
              break
            case 'number':
              ;(val || val === 0) && fd.append(key, val)
              break
            case 'boolean':
              fd.append(key, val)
              break
            case 'object':
              if (IsArray(val)) {
                val.length &&
                  (typeof val[0] === 'object'
                    ? fd.append(key, JSON.stringify(val))
                    : fd.append(key, val))
              } else if (val instanceof File) {
                fd.append(key, val)
              } else if (val !== null) {
                fd.append(key, JSON.stringify(val))
              }
              break
          }
        })
      return fd
    }
    

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 2020-06-30
      • 2014-06-24
      • 2022-01-19
      • 2019-10-21
      • 2015-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多