0
我想要做的是使用ajax發送一個post請求到服務器,並確保post請求不刷新頁面(使用e.preventDefault)。在服務器上,我想檢查用戶名或電子郵件是否被採用,如果沒有采取,然後自動登錄用戶,然後刷新頁面。問題是當我調用req.login並提交要登錄的數據時,它似乎沒有工作,但頁面仍在刷新。有任何想法嗎?req.login不記錄用戶
app.post('/signup', function (req, res) {
var userDetails = User({
username: req.body.username,
email: req.body.email,
password: bcrypt.hashSync(req.body.password1, bcrypt.genSaltSync(10))
});
User.findOne({
$or: [{
'username': req.body.username
}, {
'email': req.body.email
}]
}, function (err, user) {
if (user) {
if (allClients.indexOf(req.body.socket)) {
if (user.username === req.body.username) {
io.to(req.body.socket).emit('userInfo', 'That username is already in use.');
} else {
}
if (user.email === req.body.email) {
io.to(req.body.socket).emit('userInfo', 'That email is already in use.');
} else {
}
} else {
console.log('timeout error 822')
}
} else {
req.login(userDetails, function (err) {
if (!err) {
userDetails.save(function (err) {
if (err) throw err;
res.redirect('/');
});
} else {
console.log(err)
}
})
}
if (err) {
return done(err);
}
});
});
這裏是我做ajax發佈請求的地方。正如你所看到的,我正在阻止表單提交來刷新頁面,但如果表單成功,它將提交。
$("#form1").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: '/signup',
data: $(this).serialize(),
success: function(data)
{
window.location.reload(true);
}
});
});
當我從ajax調用中刪除e.preventDefault時,一切似乎都正常。有沒有一種方法可以告訴服務器停止e.preventDefault函數的ajax請求,並在數據保存到mongo存儲後繼續重定向('/')? –
我認爲這不是最好的方法。根據你正在使用的jQ版本添加一個'.error()'(或'.fail()')來檢查你回來的是什麼。或控制檯日誌'成功'上的數據... – AlvMF1
當我發射到客戶端時,如何在這種情況下向ajax請求拋出錯誤? –