当请求后台传递参数时,有多中类型,而每一种都须要先后台进行配合,而这有时候会很简单,有时候却十分困难,记录一下,以备后期深究数据结构
后台须要的数据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
被我认为无所不能,致使没能意识到错误,其次后台其实并非很清楚,前台究竟是如何传参的,他也没法明确指出前台到底该如何传参,只能不断尝试了