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

NuxtJS中提交Contact Form 7表单返回validation_failed错误如何解决?

Contact Form 7 表单提交校验失败解决方案

问题根源

你遇到的validation_failed报错由两个Axios的错误用法导致:

  • 手动指定Content-Type: multipart/form-data时没有携带表单必需的boundary分隔符参数,覆盖了浏览器自动生成的合法请求头,服务端无法正常解析表单字段
  • Axios的post方法参数使用错误,你把请求体和配置项都放在了第二个参数中,导致FormData没有作为完整请求体发送,配置的请求头也未生效

正确实现代码

formSubmit(e) {
  e.preventDefault();
  const formData = new FormData();
  const dat = {
    'your-radio': this.formRadio,
    'your-project': this.formProject,
    'your-name': this.formName,
    'your-tel': this.formTel,
    'your-email': this.formMail,
    'your-date': this.formDate
  }
  for(const name in dat) {
    formData.append(name, dat[name])
  }

  this.$axios.post(
    // 第一个参数:请求地址
    'https://example.wp/wp-json/contact-form-7/v1/contact-forms/ID/feedback',
    // 第二个参数:直接传入FormData作为请求体
    formData,
    // 第三个参数:请求配置项
    {
      headers: {
        // 不需要手动写完整的multipart/form-data头,设为undefined让浏览器自动生成带boundary的合法值
        // 如果你没有全局配置Axios默认Content-Type,也可以完全省略headers配置
        'Content-Type': undefined
      }
    }
  )
  .then((response) => {
    console.log(response.data.message)
  })
}

原理说明

当请求体为FormData类型时,浏览器会自动识别请求类型,为请求头添加multipart/form-data以及随机生成的boundary分隔符,服务端依靠这个分隔符拆分表单内的不同字段。手动指定Content-Type会丢失boundary参数,导致Contact Form 7无法解析提交的字段内容,直接判定校验失败。
你使用XMLHttpRequest时未手动设置Content-Type,浏览器自动完成了参数处理,所以可以正常运行;Postman在你手动设置multipart/form-data时会自动补全boundary参数,和浏览器默认行为不同,所以Postman手动配置时可以正常提交。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 13:06:00