获取API:仅在POST形式没有错误的情况下才重定向
我想执行以下操作:
然后通过获取获取邮寄表格
如果响应是错误消息(res.json):停留在同一页面上,alert(json.errorMsg)
如果响应是重定向到另一个页面(res.redirect):重定向到新页面
问题是
1)如果我使用event.preventdefault()
,则我的页面不会重定向
2)如果我不使用event.preventdefault()
,我的页面将始终重定向(如果有错误,将重定向到json)
这里是我的代码摘要:
// Client side
form.addEventListener("submit", () => {
fetch(url, fetchData)
.then((res) => res.json()) // Transform the data into json
.then(function (data) {
alert(data); // Let the user know there was an error in Captcha or provided info
})
});
// Server side
app.post('/', (req, res) => {
if (err) {
console.error(err)
return res.json({ "success": false, "msg": err })
}
return res.redirect("/confirmation_page");
});
回答如下:通常,这是通过以下两种方法之一解决的:
- 表单提交是100%在前端javascript中处理的,例如
fetch()
。这里的重定向是没有意义的,应该在前端100%处理重定向。 - 表单提交是纯HTML。由于验证是服务器的验证,因此服务器将验证请求,并且如果发生验证错误,将back重定向到原始表单。
由于听起来您选择了#1,所以您应该做的是:
- 使用
preventDefault()
- 如果提交成功,请致电
document.location = '/confirmation_page';
进行重定向