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

Rails中Turbo.visit发起POST请求触发GET请求的问题排查咨询

问题原因

Turbo.visit API 设计上仅支持发起GET类型页面导航,在配置项的data字段传入turbo-method: post的写法不会被Turbo解析,执行后会默认回退为GET请求,无法达到预期效果。

正确实现方式

Turbo 中POST/PUT/DELETE等非GET请求的导航需要通过官方表单提交API实现,触发逻辑和页面上点击配置了data-turbo-method="post"的链接完全一致,参考代码如下:

// 组装请求提交参数
const submitData = new FormData()
// 开启CSRF校验的场景需要携带合法令牌,以Rails生态为例可直接从页面meta标签读取
const csrfToken = document.querySelector('meta[name="csrf-token"]')?.getAttribute('content')
if (csrfToken) submitData.append('authenticity_token', csrfToken)
// 此处可追加业务需要的其他POST参数
// submitData.append('key', 'value')

// 构造临时表单DOM
const tempForm = Object.assign(document.createElement('form'), {
  action: 'documents/path',
  method: 'post',
  enctype: 'application/x-www-form-urlencoded'
})

// 发起POST请求,Turbo会自动处理后续的页面替换、滚动重置等导航逻辑
Turbo.navigator.submitForm(tempForm, { formData: submitData })
注意事项
  • 不要尝试给Turbo.visit传入method相关配置,该方法从设计层面就没有提供支持非GET请求的配置项
  • 若项目开启了CSRF校验,必须在提交参数中携带合法的CSRF令牌,否则请求会被服务端拦截返回403/422错误
  • 上述写法兼容Turbo 7.0及以上所有稳定版本
  • 如果需要提交JSON格式载荷、或者携带自定义请求头,需要先通过Turbo.fetch发起接口请求拿到响应内容,再手动调用Turbo.render完成页面渲染,无法直接通过导航API实现

内容的提问来源于stack exchange,提问作者Petros Kalafatidis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:06:24