【问题标题】:How to POST JSON attributes with underscore?如何使用下划线发布 JSON 属性?
【发布时间】:2018-01-05 16:00:24
【问题描述】:

问题: 在服务器上,我收到 api_key 参数为 api key用空格而不是下划线),我如何发送它下划线?

代码:

data = {
  api_key: this.state.api_key
}

axios.post('/resource', data)
  .then(response => { console.log(response) });

我在前端同时使用 Reactaxios必须使用 axios),以及 Rails在后端。

谢谢

更新

首先接收参数的rails action:

private

resource_params
  ActiveModelSerializers::Deserialization.jsonapi_parse(params)
end

【问题讨论】:

  • 对你想要做什么有点困惑,你是在问如何让 rails 发送带有下划线的参数?还是您希望 JS 也发送不带下划线的参数
  • 这个问题与jsonreact无关。
  • 你如何看到或检查 Rails 接收到的密钥是空格而不是下划线?
  • 通过服务器输出
  • 您能否提供任何其他详细信息?我几乎可以肯定这是一个 Rails 问题。您使用什么方式接收请求?

标签: javascript ruby-on-rails json reactjs axios


【解决方案1】:

Axios serializes object params with JSON.stringify,这意味着几乎可以肯定请求会按照您想要的方式发送(除非您以某种方式对其进行转换)。问题可能出在 Rails 端。查看您的 resource_params 方法,我可以看到您正在使用 ActiveModelSerializers 的 JSON API 适配器。但是,您使用 Axios 发送的请求不是JSON API Compliant。您可以改用JSON.parse(params),或者更好的是,使用Strong Params。您还提到您正在使用resource_params 作为之前的操作,但看起来您并没有像预期的那样在那里分配一个实例变量。您如何处理该响应?您是否也在您的操作中直接调用该方法?

无论如何,如果这没有帮助,我很乐意在聊天中继续我们的讨论。

【讨论】:

  • 把before_action指向是我的错误,它不是,只是一个作为参数调用的函数,用于接收参数的方法;考虑到有多少,为了简洁起见,我省略了 JSON API 标准/其余属性。最后,问题是 Visual Studio Code 的控制台,正如您在我的回答中看到的那样,但非常感谢您的快速回复和您的时间:)
【解决方案2】:

经过数小时的努力,我找到了罪魁祸首:Visual Studio Code

这是 VS Code 上的输出:

这是linux终端上的输出:

这是一个愚蠢的问题,但我从来没有想过该死的文本编辑器会省略下划线。

真的 @chris-g,这不是 JSON 或 React 的问题,它在 Rails 方面正如 @Xavier 所怀疑的那样,尽管问题无关到缺乏下划线本身。

这就是我在这么久之后给微软一些功劳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-13
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-24
    相关资源
    最近更新 更多