我要做的是使用ajax将post请求发送到服务器,并确保post请求不刷新页面(使用e.preventDefault)。在服务器上,我想检查用户名或电子邮件是否被删除,如果没有,则自动登录用户,然后刷新页面。问题是,当我调用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);
}
});
});
答案 0 :(得分:0)
我相信你已经采取过'您的API会将消息视为成功。
您可以针对这些案例提出错误,并catch
使用$.ajax
或设置不同的回复,并在data
上阅读success
。