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

如何解决Axios POST请求无法发送表单数据的问题?

问题分析与修复方案

你的代码存在几个关键问题,导致表单数据没有发送到后端:

1. 错误的事件监听逻辑

Formik的onSubmit回调本身就是表单提交后的处理函数,你不需要在这个回调里再给表单绑定submit事件监听。第一次点击提交时,这个监听是在提交之后才注册的,所以根本不会触发axios请求,自然看不到数据发送的迹象。

2. 重复且多余的FormData创建

你已经通过Formik的values获取了所有表单字段值,并且创建了data对象,但后面又通过new FormData(form)重新生成了一个FormData实例,这不仅重复操作,还可能因为表单控件的name属性不匹配导致数据丢失。

3. 手动设置Content-Type头的问题

当使用axios发送FormData时,不需要手动设置Content-Type: multipart/form-data,axios会自动添加正确的请求头(包含boundary分隔符),手动设置反而会导致后端无法正确解析表单数据。


修正后的代码

<Formik
  initialValues={{
    firstName: "",
    lastName: "",
    email: "",
    Password: "",
    ConfirmPassword: "",
  }}
  validationSchema={SignupSchema}
  onSubmit={async (values) => {
    console.log("logging click");
    // 直接用Formik的values创建FormData
    const formData = new FormData();
    Object.entries(values).forEach(([key, value]) => {
      formData.append(key, value);
    });

    // 若后端接收JSON格式,可直接发送values,无需转FormData:
    // const res = await axios.post("http://localhost:8080/api/admin/signup", values)

    try {
      const res = await axios.post(
        "http://localhost:8080/api/admin/signup",
        formData
        // 无需手动设置Content-Type头
      );
      console.log(res);
    } catch (err) {
      console.log(err);
    }
  }}
>
  {/* 表单控件需保证name属性与initialValues的键名一致 */}
</Formik>

额外注意事项

  • 确保表单控件(如input)的name属性值和Formik的initialValues中的键名完全一致,这样Formik才能正确收集数据。
  • 可以通过浏览器的网络面板查看请求是否发送、请求参数是否正确,这比仅看控制台日志更直观。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 01:35:15