如何使用 Axios 将 JSON 数据正确发送到 rails 服务器,以正确匹配所需的 rails 参数哈希?

Posted

技术标签:

【中文标题】如何使用 Axios 将 JSON 数据正确发送到 rails 服务器,以正确匹配所需的 rails 参数哈希?【英文标题】:How to send JSON data correctly using Axios to a rails server, to match the required rails params hash correctly? 【发布时间】:2018-05-30 07:36:24 【问题描述】:

我正在向 Rails 服务器发出 GET 请求,参数应如下所示:

"where"=>"producer_id"=>["7"]

我正在从 Vue 中的前端应用程序发出请求,并使用 Axios 发出请求。我提出这样的要求:

const data = await this.axios.get('http://localhost:3000/data.json', 
  headers: 
    'X-User-Token': this.$store.getters.authToken,
    'X-User-Username': this.$store.getters.user.username
  ,
  params: 
    where: 
      producer_id: data.producers
    
  
)

但是,在 rails 服务器输出中,它显示参数是这样发送的:

"where"=>"\"producer_id\":[\"7\"]"

因此我没有得到正确的数据。

我该如何解决这个问题?为什么paramswhere 对象)中的第二层是作为字符串发送的?

【问题讨论】:

【参考方案1】:

事实证明,在这种情况下,参数必须被序列化https://github.com/axios/axios/issues/738

我也使用了paramsSerializer 函数来克服这个问题

const data = await this.axios.get('http://localhost:3000/data.json', 
  headers: 
    'X-User-Token': this.$store.getters.authToken,
    'X-User-Username': this.$store.getters.user.username
  ,
  params: 
    where: 
      producer_id: data.producers
    
  ,
  paramsSerializer: function (params) 
    return jQuery.param(params)
  
)

编辑:

我现在使用 qs 代替 jQuery:

axios.defaults.paramsSerializer = (params) => 
  return qs.stringify(params, arrayFormat: 'brackets')

【讨论】:

以上是关于如何使用 Axios 将 JSON 数据正确发送到 rails 服务器,以正确匹配所需的 rails 参数哈希?的主要内容,如果未能解决你的问题,请参考以下文章

如何将简单值从 axios.post 发送到 asp.net 核心?

如何在VueJS中使用v-on:change并发送参数以使用axios获取更新JSON数据

如何使用 VueJS 和 AXIOS 映射 JSON 对象

axios怎么发送xml数据

使用axios发送post请求,将JSON数据改为为form类型

使用axios发送post请求,将JSON数据改为为form类型