當請求後臺傳遞參數時,有多中類型,而每一種都須要先後臺進行配合,而這有時候會很簡單,有時候卻十分困難,記錄一下,以備後期深究數據結構
後臺須要的數據app
嵌套數據,第二層後用字符串格式 {obj: '{a: 1}'}
url
前臺設置prototype
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
參數設置qs.stringify(params)
插件
上述藉助了
qs
插件,看起來很美好,並且也很ok,惋惜死活後臺接收不到{obj: {a: 1}}
, obj的具體參數,各類折騰依舊不行,各類折騰qs
,惋惜無解,仔細回味 後臺一句話,obj的參數是JSON格式字符串,何不手動改造,而不使用qs
呢code
請求參數結構orm
const params = { pageSize: 5, currentPage: 1, sortParams: [ { sort: 'time desc' } ] }
須要改造爲
blog
經過上圖能夠看出,第二層以後的結構保留字符串格式字符串
改造string
// 數據結構判斷 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) // 即可以了
qs
的stringify
有不少種配置,可是我沒有找到適合個人,只能手動改造了qs
被我認爲無所不能,致使沒能意識到錯誤,其次後臺其實並非很清楚,前臺究竟是如何傳參的,他也沒法明確指出前臺到底該如何傳參,只能不斷嘗試了