form數據請求參數格式


請求后台參數格式問題

當請求后台傳遞參數時,有多中類型,而每一種都需要前后台進行配合,而這有時候會很簡單,有時候卻十分困難,記錄一下,以備后期深究

數據

后台需要的數據

  • form表單
  • 嵌套數據,第二層后用字符串格式 {obj: '{a: 1}'}

前台設置

  • form請求頭 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
  • 參數設置qs.stringify(params)

上述借助了qs插件,看起來很美好,而且也很ok,可惜死活后台接收不到{obj: {a: 1}}, obj的具體參數,各種折騰依舊不行,各種折騰qs,可惜無解,仔細回味 后台一句話,obj的參數是JSON格式字符串,何不手動改造,而不使用 qs

代碼

請求參數結構

const params = {
  pageSize: 5,
  currentPage: 1,
  sortParams: [
    {
      sort: 'time desc'
    }
  ]
}

需要改造為
數據結構1

數據結構2

通過上圖可以看出,第二層之后的結構保留字符串格式

改造

// 數據結構判斷
function type (params) {
  // Symbol類型
  const typeofObje = typeof params
  if (typeofObje !== 'object') return typeofObje
  if (params === null) return 'null'
  const obj = {};
  `Boolean,Number,String,Function,Array,Date,RegExp,Object,Error,Set,Map`.split(',').forEach(e => {
    obj[`[object ${e}]`] = e.toLowerCase()
  })
  const res = Object.prototype.toString.call(params)
  return obj[res]
}
// 改造
const Data = JSON.parse(JSON.stringify(params))
for (let item in Data) {
  if (type(Data[item]) === 'object' || type(Data[item]) === 'array') {
    // 只要是object,array就進行轉為JSON字符串
    Data[item] = JSON.stringify(Data[item])
  }
}
// 引入qs
import qs from 'qs'
payLoad = qs.stringify(Data) // 便可以了

總結

  • 在使用過程中,qsstringify有很多種配置,但是我沒有找到適合我的,只能手動改造了
  • 感覺難點在於,qs被我認為無所不能,導致沒能意識到錯誤,其次后台其實並不是很清楚,前台到底是如何傳參的,他也無法明確指出前台到底該如何傳參,只能不斷嘗試了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM