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

Remix 1.15中useSubmit钩子自定义请求头不生效问题

Remix 1.15 useSubmit自定义请求头不生效的解决方案

问题原因

Remix的useSubmit钩子是为模拟HTML表单提交设计的,HTML原生表单不支持application/json类型的请求,因此当你手动设置Content-Type: application/json时,Remix会自动覆盖该请求头,改用表单默认的编码格式(如multipart/form-data或application/x-www-form-urlencoded),导致自定义头不生效。而Postman测试正常是因为它直接发送原始HTTP请求,没有这个自动处理逻辑。

解决方案

方案1:改用FormData提交(适配useSubmit的设计)

将数据封装为FormData,符合useSubmit的表单提交逻辑,无需手动设置Content-Type:

提交代码修改为:

const formData = new FormData();
formData.append("some", "values");
submit(formData, {
  method: "post",
  action: "/dashboard/",
});

对应的action函数调整为:

export async function action({ request }) {
  const formData = await request.formData();
  const data = Object.fromEntries(formData);
  console.log('接收的数据:', data); // { some: "values" }
  return "uhuu";
}

方案2:直接使用fetch API发送JSON请求

如果必须发送application/json格式的请求,绕过useSubmit,直接使用原生fetch:

fetch("/dashboard/", {
  method: "post",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ some: "values" }),
})
.then(response => response.text())
.then(result => {
  console.log('响应结果:', result);
  // 可根据需要添加后续逻辑,比如页面跳转或状态更新
});

原action函数无需修改,依然可以用await request.json()解析数据。

内容的提问来源于stack exchange,提问作者Joao Gui

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:57:43