Netlify Forms 无法与 Next.js 网站一起使用

问题描述 投票:0回答:1

我尝试在我的 Next.js 网站上使用 netlify 表单,但它不起作用,我不知道该怎么做。 请帮忙!

这是我的代码。

<form className='contacts-form' onSubmit={handleSubmit} method='post' name="contact" data-netlify="true">
    <input type="hidden" name="form-name" value="contact" />
    {/* other inputs... */}
    <button type="submit" name="submit">Submit</button>
</form>
  const handleSubmit = (event) => {
    event.preventDefault();
  
    const myForm = event.target;
    const formData = new FormData(myForm);
  
    fetch("/", {
      method: "POST",
      headers: { "Content-Type": "application/x-www-form-urlencoded" },
      body: new URLSearchParams(formData).toString(),
    })
      .then(() => router.push("/thank-you"))
      .catch((error) => alert(error));
  };
forms next.js netlify netlify-form
1个回答
0
投票

我解决了我的问题。

由于我的应用程序重定向,我遇到了错误 303。我通过编辑我的handleSubmit函数解决了这个问题: 而不是

fetch("/", {...

我把它改为:

fetch(`/${locale}`, {...

因为之前我有

import { useRouter } from 'next/router';
// other code...
const router = useRouter();
const { locale } = router;

!!!您需要一个form.html来帮助netlify检测您的表单!!! 你必须把它放在公共文件夹中:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Netlify form</title>
</head>

<body>
    <!-- A little help for the Netlify post-processing bots -->
    <form name="contactform" data-netlify="true" hidden>
        <label for="nome">Nome:</label>
        <input id="nome" type="text" name="nome" />

        <label for="cognome">Cognome:</label>
        <input id="cognome" type="text" name="cognome" />

        <label for="email">Email:</label>
        <input id="email" type="email" name="email" />

        <label for="messaggio">Messaggio:</label>
        <textarea id="messaggio" name="messaggio"></textarea>

        <button type="submit" name='submit'></button>

    </form>
</body>

</html>

请注意,如果标签为空,Netlify 不会将输入的内容发送到电子邮件通知。它只会显示在 Netlify UI 中。

© www.soinside.com 2019 - 2024. All rights reserved.