用axios发送post请求data里的数组怎么变成了对象

发布于 2022-09-04 23:36:39 字数 850 浏览 33 评论 0

组件内请求:(第一次输出)

clipboard.png

store里的:

clipboard.png

api里的:

clipboard.png

config里的:(第二次输出)

clipboard.png

结果:

clipboard.png
orderlist,couponids里的数组变成了对象,怎么回事?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

风为裳 2022-09-11 23:36:39

我也遇到了这个问题,最终使用qs库解决了这个问题,具体代码段如下

return createRequest({
    url: url,
    method: 'post',
    params: params,
    data: data,
    transformRequest: [
      function (data) { // 解决传递数组变成对象的问题
        Object.keys(data).forEach((key) => {
          if ((typeof data[key]) === 'object') {
            data[key] = JSON.stringify(data[key]) // 这里必须使用内置JSON对象转换
          }
        })
        data = qs.stringify(data) // 这里必须使用qs库进行转换
        return data
      }
    ]
  })

重点是transformRequest这里,需要将参数转换一下。

上面的方案只是为了让传输看起来是json的格式,但是在实际使用过程中是因为我后端接收参数的姿势不对导致的,后端是用golang接收参数,修改了后端后原来的方式就可以解析为数组,不需要再进行这样的转换了。

一念一轮回 2022-09-11 23:36:39

axios遇到同样的问题, 因为接口定义入参必须是一个json, 不能用楼上的qs方案解决, 所以我写了一个递归实现了{0: xxx, 1: yyy}转换成标准数组 => [xxx, yyy]

...,
transformRequest: [
  function(data){
    return transformObjToArr(data);
  }
]

...
...

function transformObjToArr(data, isRoot=true){
  if(!data || typeof data !== 'object') return data;
  let dataNew = [];
  let keys = Object.keys(data);
  if(keys.includes('0')){
    keys.forEach(k => dataNew[k] = transformObjToArr(data[k], false));
  } else {
    keys.forEach(k => data[k] = transformObjToArr(data[k], false));
  }
  if(isRoot){
    return dataNew.length ? JSON.stringify(dataNew) : JSON.stringify(data);
  } else {
    return dataNew.length ? dataNew : data;
  }
}
人生戏 2022-09-11 23:36:39

有人找到解决方案了吗?同问,我也碰到了这个问题

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文