![](/img/trans.png)
[英]How to make popup message after successful form submission without page reload?
[英]After form submission, new data does not appear without page reload
在我的ExpressJS應用中,我有兩條到達同一位置的路線,一條到達“ get”,一條到達“ post”。
在“獲取”頁面上,它通過MongooseJS轉儲我的MongoDB集合中的所有文檔,然后是一個向集合中添加新記錄的表單。
在“發布”頁面上,它接收表單數據並將其添加到集合中,然后顯示您通過“獲取”看到的同一頁面。
它可以工作,但是提交表單后,除非重新加載頁面,否則不會顯示新記錄。 我將呈現頁面的代碼放在將數據添加到集合的部分的最底部,因此在我看來應該可以,但是不能。
exports.index = function(req, res){
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
exports.add = function(req, res){
newServer = new Server({
name: req.body.name,
os: req.body.os,
osVersion: req.body.osVersion
});
newServer.save(function (err) {
if (err) {
console.log(err);
}
});
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
好的,我似乎在回調中又一次犯了這個錯誤。 我解決了這個問題。
exports.add = function(req, res){
newServer = new Server({
name: req.body.name,
os: req.body.os,
osVersion: req.body.osVersion
});
newServer.save(function (err) {
if (err) {
console.log(err);
} else {
Server.find({},
function(err, docs) {
if (!err){
res.render('servers', { title: 'verify', results: docs});
}
else { console.log(err);}
}
);
}
});
}
是的,那些數據庫查詢是異步的,因此回調將解決此問題。 但是,您應該研究使用諾言。 貓鼬默認會返回promise,或者您可以導入選擇的庫。 在處理嵌套的回調和查詢以及錯誤處理時,它們將派上用場。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.