Javascript 如何在res.redirect()之前等待
我的HTML文件中有一个按钮,当它被点击并提交表单时,它会调用post路由。单击按钮还会调用我的另一个javascript文件中的一个函数,该函数会激活“sweetalert”警报框 但是,我现在遇到的问题是,在post请求执行Javascript 如何在res.redirect()之前等待,javascript,html,node.js,sweetalert,Javascript,Html,Node.js,Sweetalert,我的HTML文件中有一个按钮,当它被点击并提交表单时,它会调用post路由。单击按钮还会调用我的另一个javascript文件中的一个函数,该函数会激活“sweetalert”警报框 但是,我现在遇到的问题是,在post请求执行res.redirect(“/”)之前,用户没有足够的时间读取警报 我希望有以下任何一种解决方案: 1) 在页面重定向后调用警报(我在某处读到,您无法使用node.js控制下一个页面,因此这可能不可能) 2) 等待几秒钟,然后调用res.redirect(“/”) 3)
res.redirect(“/”
)之前,用户没有足够的时间读取警报
我希望有以下任何一种解决方案:
1) 在页面重定向后调用警报(我在某处读到,您无法使用node.js控制下一个页面,因此这可能不可能)
2) 等待几秒钟,然后调用res.redirect(“/”
)
3) 任何其他适当的解决方案
包含按钮的HTML文件:
<button formaction="/removetask" type="submit" id="top" class="btn btn-primary btn-block" onclick="success()"> Complete </button>
node.js文件:
app.post("/removetask", async function(req, res) {
...
res.redirect("/");
});
链接到HTML中的“sweetalert”:
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
编辑:
我注意到,在用户关闭警报之前,使用常规HTML
alert()
会停止一切并阻止重定向。是否可以将“sweetalert”警报更改为这样的行为?您可以尝试其他方式来显示警报
首先,您不需要重定向到原始页面
app.post("/removetask", async function(req, res) {
...
res.render('alarm page')
});
在报警页面上,javascript文件将设置等待片刻的时间
alarmpagejs.js跟随
setTimeout(() => {
window.location = "/";
}, 5000)
那么结果就是这样的逻辑:
您可以等待任意毫秒数我稍微更改了您的代码。 现在通过点击表单是不提交的 在点击成功按钮后,表单将被提交 HTML:
用户单击按钮时,您可能不需要重定向,只需执行任务删除操作即可。然后,一旦用户单击swal弹出窗口上的“ok”,您就可以重定向them@Nick帕森斯:如果用户没有单击“确定”,而是在警报框外单击,也会关闭警报,该怎么办。我重定向到根页面,因为我希望页面刷新和更新数据。我认为sweetalert允许您在单击按钮或通过单击弹出窗口外部关闭弹出窗口时运行事件。如果你愿意的话,你也可以禁用关闭外部点击……请原谅我对nodejs缺乏了解,但是res.render(‘报警页面’)实际上做什么呢?我是否需要创建一个名为alarmpage.html的新html文件?render函数可以在url上呈现html。例如,如果在“/hi”中调用res.render('hello.html'),则会在/hiI used
app.set(“视图引擎”、“ejs”)中呈现hello.html内容因为我有一个.ejs文件,所以当我执行res.render('alarmpage')
时,我发现错误:error:无法在views目录中查找视图“alarmpage”
。我该怎么做?当然会有错误。这只是一个例子。您需要创建其他报警视图文件。比如alarm.ejs。您可以像``res.render('alarm.ejs',{message:'blablabla'})这样编写``我们需要对其他ejs文件进行编码。感谢您的解决方案,但不幸的是,它仍然不像标准的Javascript警报,因为它不会在nodejs重定向页面之前等待用户关闭警报。对不起!我忘记添加“type=”按钮“。我更新了链接中的代码。对我来说,它很管用。我希望这对你也有用。
setTimeout(() => {
window.location = "/";
}, 5000)
<button type="button" id="top" class="btn btn-primary btn-block" onclick="success()"> Complete </button>
function success(){
swal({
title: "Congratulations!",
text: "Goal successfully completed",
type: "success",
}).then(function(){
document.getElementById('form').submit();
});
}