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

une*_*et7 6 get django-rest-framework reactjs axios

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

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

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

Shu*_*tri 10

您需要序列化您的参数,并且可以通过编写此 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;
});
Run Code Online (Sandbox Code Playgroud)

从 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;
});
Run Code Online (Sandbox Code Playgroud)

  • 从 `axios 0.18.0` 开始,`Qs` 被删除。使用库“query-string”或“qs”为之后访问此答案的任何人编码参数。 (2认同)