axios的get请求传入数组参数后端无法接收的问题

问题描述

在做项目时,需要把前端的数组通过axios的get请求发送到后端处理,于是像这样直接发送:

  axios.get(
      url,
      {
    
    
          params:
          {
    
    
            arr: update_arr
          }
      }
  	)

这时在后端接收后报错说:没有 ‘arr’ 这个key:

arr = request.GET['arr']
print(arr)  # 报错显示 没有 ‘arr’ 这个key

那就先不指定key,直接GET,发现request请求中把‘arr’变成了‘arr[]’

arr = request.GET
print(arr)  
# 输出:<QueryDict: {'arr[]': ['{"day":"2023-03-14","type":0}', '{"day":"2023-03-15","type":0}']}>

那我们就用’arr[]’ 这个key去取数据,但是输出的是传过去数组的最后一个元素

arr = request.GET['arr[]']
print(arr)  
# 输出:{"day":"2023-03-15","type":0}

所以axios的get请求并不能像这样直接传数组,那该怎么办呢?


解决办法

在网上查阅大量资料,普遍的是提供了两种方法:
1、自己编写数组序列化器
2、使用qs插件
详情可参考:
https://blog.csdn.net/weixin_62277266/article/details/124158958
https://www.cnblogs.com/kingreatwill/p/12641238.html#/cnblog/works/article/12641238
但本人对js代码不是很熟悉,同样也不想装额外装插件,所以就自动跳过了这两种普遍方法,采取一种曲线救国的方法。

将数组转换成字符串传送:

  axios.get(
      url,
      {
    
    
          params:
          {
    
    
            arr: JSON.stringify(update_arr)
          }
      }
  	)

这样我们在后端只需稍微处理一下,我们就可以在后端拿到我们想要的数组了

 from ast import literal_eval
 ...
 arr = request.GET['arr']
 print(literal_eval(arr))
 # 输出: [{'day': '2023-03-14', 'type': 0}, {'day': '2023-03-15', 'type': 0}]

猜你喜欢

转载自blog.csdn.net/bradyM/article/details/129366404