You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rails API无法接收fetch POST请求的请求体数据

解决Rails API中POST请求体无法传递的问题

嘿,我一眼就揪出你代码里的小问题啦,这大概率就是请求体数据传不到后端的元凶!

你看这段fetch请求的配置:

header: { 'content-type': 'application/json' }

这里的header拼写错了!fetch API的请求配置里,HTTP头字段的正确键名是复数形式的headers(带s)。单数的header会被浏览器直接忽略,导致你的请求根本没带上Content-Type: application/json这个关键头信息。

Rails API默认只会解析带有正确Content-Type标识的JSON请求体,如果这个头没设置,后端就不会把请求体内容解析到params里——这就解释了为什么你能触发控制器动作,却拿不到请求数据。

修正后的代码

把header改成headers就搞定了:

export const payForItem = (payData) => { 
  return dispatch => { 
    dispatch(payForItemStart()); 
    const data = {
      userID: payData.userID, 
      adID: payData.adID, 
      price: payData.price
    }
    fetch(`/api/pay`, { 
      method: 'POST', 
      headers: { // 这里改为复数headers
        'content-type': 'application/json' 
      }, 
      body: JSON.stringify(data) 
    })
  }
}

额外验证小技巧

  • 改完后打开浏览器开发者工具的Network面板,重新发起请求,确认请求头里包含Content-Type: application/json;
  • 后端可以在控制器里打印request.content_type,如果输出是application/json,说明Rails已经能正确识别并解析请求体了。

另外,既然你说其他同格式请求能正常工作,说明Rails后端的JSON解析配置(比如wrap_parameters相关设置)是没问题的,所以重点就放在前端这个拼写小失误上啦!

内容的提问来源于stack exchange,提问作者O.MeeKoh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:10:33