javascript - Next.js 获取验证失败将表单数据发送到联系表单 7 API
问题描述
我正在尝试将数据发送到 Contact Form 7 API,但在发送表单时出现错误:
{into: "#", status: "validation_failed", message: "One or more fields have an error. Please check and try again.", posted_data_hash: "", invalid_fields:
表单上的输入字段具有所有正确的名称值,例如name="your-name"
我正在发送这样的表单数据:
async function handleSubmit(e) {
e.preventDefault();
const formData = {};
Array.from(e.currentTarget.elements).forEach((field) => {
if (!field.name) return;
formData[field.name] = field.value;
});
await fetch(
"https://domain.tld/cms/wp-json/contact-form-7/v1/contact-forms/1234/feedback",
{
body: JSON.stringify(formData),
headers: {
"content-type": "multipart/form-data",
},
method: "POST",
}
)
.then((response) => response.json())
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error("Error:", error);
});
}
我已经在 Postman 中尝试过,它可以正常工作并发送状态消息。我不知道我在这里做错了什么。
这是表格:
<Form onSubmit={handleSubmit}>
<Form.Group controlId="your-name">
<Form.Control
required
type="text"
placeholder="Your name"
name="your-name"
/>
<Form.Control.Feedback type="invalid">
Please enter your name
</Form.Control.Feedback>
</Form.Group>
<Form.Group controlId="your-email">
<Form.Control
required
type="email"
placeholder="Your email address"
name="your-email"
/>
<Form.Control.Feedback type="invalid">
Please enter your email
</Form.Control.Feedback>
</Form.Group>
<Form.Group controlId="your-message">
<Form.Control
as="textarea"
cols={30}
rows={6}
placeholder="Write your message..."
name="your-message"
/>
</Form.Group>
<Button
type="submit"
variant="primary"
size="lg"
>
Send Message
<span></span>
</Button>
</Form>
解决方案
如果您使用任何以您Content-Type
开头的内容,multipart/*
则必须设置边界,并且您的代码中没有边界。
为了克服这个问题,只需使用FormData
类const formData = new FormData()
和附加值formData.append(key, value)
,这样您将拥有一个 FormData 实例,因此 Axios 可以确定您发送的数据类型,并且它可以自动设置 Content-Type 与边界。
这是应该工作的代码,但我还没有测试过:
async function handleSubmit(e) {
e.preventDefault();
const formData = new FormData();
Array.from(e.currentTarget.elements).forEach((field) => {
if (!field.name) return;
formData.append(field.name, field.value);
});
await fetch(
"https://domain.tld/cms/wp-json/contact-form-7/v1/contact-forms/1234/feedback",
{
body: formData,
method: "POST",
}
)
.then((response) => response.json())
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error("Error:", error);
});
}
推荐阅读
- acumatica - 将明细行总计字段添加到屏幕
- python - 使用 resample() 和 apply() 仅填充特定日期范围内的连续期间...知道吗?
- python - 计算具有一定数量的 NaN 可接受的连续值
- javascript - 在异步函数的多个变量中存储 Promise
- ruby - 如何从logstash中的嵌套对象中删除点
- jmeter - 如何在拆线线程中使用 Bean shell 采样器在 JMeter 中创建 HTML 报告?
- python - 如何删除 Seaborn facetgrid 中的重复轴标签?
- flutter - 当我在 firestore 中的 updateData 比 updateData 功能不起作用时?
- php - 仅当我通过 cli 手动执行时,PHP cron 作业才会执行
- c++ - Instance 方法是如何存储在内存中的?