发布于2022-08-03 06:58 阅读(1410) 评论(0) 点赞(27) 收藏(5)
当我们需要通过get方式传递一个包含数组的对象作为参数,例如:
const params = {
sort: ['id,desc', 'name,asc'],
type: 'term'
}
预期是解析为:https://www.cnblogs.com/api/test?sort=id%2Cdesc&sort=name%2Casc&type=term
然而真相是这样的:https://www.cnblogs.com/api/test?&sort[]=id,desc&sort[]=name,asc&type=term,后台是不可能解析到传递的参数。
// 在项目中使用命令行工具输入
npm install qs
// 引入qs插件
import qs from 'qs'
用qs插件把参数转码
qs.stringify(params, { arrayFormat: 'repeat' })
// 输出结果: sort=id%2Cdesc&sort=name%2Casc&type=term
作为一个优秀的前端工程师,我们习惯用json形式的接口传值方式,例如:
export function getTest(params) {
return request({
url: 'api/test',
method: 'get',
params
})
}
// https://www.cnblogs.com/api/test
// 这种是没有效果的
无奈,这种习惯方式这对于我们的需求是行不通的,所以尝试了这种方式:
export function getTest(params) {
return request({
url: 'api/test',
method: 'get',
params: qs.stringify(params, { arrayFormat: 'repeat' })
})
}
// https://www.cnblogs.com/api/test?0=sort=id%2Cdesc&sort=name%2Casc&type=term
// 虽然看似达到预期了,但并没有达成一致,字符串拼接结果中间带了 “0=” 还是行不通
于是尝试原始方式,用url字符串拼接的形式
export function getTest(params) {
return request({
url: 'api/test?' + qs.stringify(params, { arrayFormat: 'repeat' }),
method: 'get'
})
}
// https://www.cnblogs.com/api/test?sort=id%2Cdesc&sort=name%2Casc&type=term
// 和我们的预期达成一致,这才是我们要的结果
1、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'indices' })
// 输出结果:'a[0]=b&a[1]=c'
2、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'brackets' })
// 输出结果:'a[]=b&a[]=c'
3、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'repeat' })
// 输出结果:'a=b&a=c'
4、qs.stringify({ a: ['b', 'c'] }, { arrayFormat: 'comma' })
// 输出结果:'a=b,c'
原文链接:https://blog.csdn.net/onlyAngel521/article/details/123108757
作者:西小口到了吗
链接:http://www.qianduanheidong.com/blog/article/381411/292b0b6ac95a19b9a71e/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!