axios中怎么传数组

发布于 2022-09-05 06:21:27 字数 616 浏览 20 评论 0

vue中用axios发请求,需要传一个数组,数组中是对对象,直接传的话,会默认调用string方法传入的是[object,object],然后用JSON.stringify方法转换了一下,还是不行,数组要怎样传啊?

productList:JSON.stringify([{

                            priceStockId:this.priceStockId,
                            productTypeName:this.productTypeName,
                            productNoName:this.productNoName,
                            productValueName:this.productValueName
                    }])

clipboard.png

报415错误

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

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

发布评论

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

评论(4

久而酒知 2022-09-12 06:21:27

经过实验,axios的get方法中使用params时对于js数组类型的参数的默认操作比较诡异,会使得参数名后带上'[]'字符串,不得不说是基本反非PHP系后端的直觉了 /手动斜眼

而使用JSON.stringify()处理也不是那么好,会将参数变成字符串类型,例如原数组id为[1,2,3],这样处理后后端接受的就变为'id=[1,2,3]'了,可以解析,但对于使用某些框架自带解析的来说这简直是崩坏画风。

究其原因是axios对params的序列化采用的是qs库

因此可以使用qs自带的 arrayFormat 参数配置解决这个问题,大致配置如下:


// qs库应该是axios安装时会自带的

const qs = require('qs');

axios.get(url, {
    params:{
        arr: [1,2,3]
    },
    paramsSerializer: function(params) {
        return Qs.stringify(params, {arrayFormat: 'repeat'})
    }
})

这样后端获得参数就比较正常了,为'id=1&id=2&id=3'

参考文档:

  1. 知乎-axios get的params怎么传入数组
  2. 看云-Axios 中文说明
凉栀 2022-09-12 06:21:27
let arr = [1,2,3]
axios({url: '/user/',
    params: {
        id: arr + '',    // 重点在这数组加上'',即可变为 "1,2,3"
    }
}
所形成的url为: /user?id=1,2,3    等价于 /user?id=1&id=2&id=3
万人眼中万个我 2022-09-12 06:21:27

使用JSON.stringify是可以的,但是你说还是不行
clipboard.png

你上面这种方法是可以的,但并不一定是后端需要的格式。415是服务器返回的错误,而不是浏览器错误,意思是说,你的请求已经到了服务端,但是服务端不能正确处理你的请求,或者是存在其他的问题。
参考资料:https://baike.baidu.com/item/...

瀟灑尐姊 2022-09-12 06:21:27
  1. POST传数组没问题,data支持json格式。

  2. GET数据带在url后面,转字符串就可以了。

大概是你的姿势不太对,请让大家看看你的姿势。

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