在 Axios 中的 GET 方法 URL 搜索参数中发送嵌套对象

IT技术 reactjs get django-rest-framework axios
2021-05-07 21:09:45

我正在尝试使用 URL 搜索参数发送请求,如下所示,但我无法访问服务器端的嵌套对象过滤器

axios.get('/get handler', {
  params: { 
    room: 1,
    filter: {
     fan: 2, 
     table: 1,
  }
});

我可能做错了什么?
在服务器端使用Django restFramework 3,但我无法访问filter该方法中的密钥。我正在使用访问查询参数,request.query_params 但是当request.query_params.get('filter')我得到none

1个回答

您需要序列化您的参数,并且您可以通过编写此 github 问题中提到的小配置来完成

通常你会在 main.js 文件或应用程序的顶级文件中有这个配置,但这同样取决于你想要执行它的时间

// main.js
import axios from "axios";

// Format nested params correctly
axios.interceptors.request.use(config => {
  window.console.log(config);

  config.paramsSerializer = params => {
    // Qs is already included in the Axios package
    return Qs.stringify(params, {
      arrayFormat: "brackets",
      encode: false
    });
  };

  return config;
});

从 axios 0.18.0 开始:

// main.js
import axios from "axios";
import Qs from 'qs';

// Format nested params correctly
axios.interceptors.request.use(config => {

  config.paramsSerializer = params => {
    // Qs is not included in the Axios package
    return Qs.stringify(params, {
      arrayFormat: "brackets",
      encode: false
    });
  };

  return config;
});