我正在创建一个必须使用AJAX验证表单的应用程序。没什么太花哨的。触发表单提交时,我将发布到Node.js服务器上的URL并使用Express进行路由。如果数据未通过所有验证要求,我发送的状态代码为400,如下所示:
app.post('/create', checkAuth, function (req,res)
{
var errors = new Errors();
if (req.body['game-name'].length < 3 || req.body['game-name'].length > 15)
{
res.send({
msg: 'Game name must be between 3 and 15 characters.'
}).status(500).end();
}
else
{
GameModel.find({id: req.body.roomname}, function (err,result)
{
if (result.length !== 0)
{
errors.add('A game with that name already exists.');
}
//Some more validation
if (errors.get().length > 0)
{
res.status(400).send({
msg: errors.get()[0]
}).end();
return;
}
else
{
var data = new GameModel({
roomname: req.body['roomname'],
owner: req.session.user,
id: req.body['roomname'].toLowerCase(),
config: {
rounds: req.body['rounds'],
timeLimit: req.body['time-limit'],
password: req.body['password'],
maxplayers: req.body['players'],
words: words
},
finished: false,
members:
[
req.session.user
]
});
data.save(function (err, game)
{
if (err) {
console.log(err);
res.send({
msg: 'Something funky happened with our servers.'
}).status(500).end();
}
else
{
res.send({
msg: 'All good!'
}).status(200).end();
}
});
}
});
}
});
在客户端,我有以下代码:
$.ajax({
type: "POST",
url: "/someURL",
data: $("form").serialize(),
statusCode:
{
200: function (data)
{
//All good.
},
400: function (data)
{
//Uh oh, an error.
}
}
});
奇怪的是,每当我发送400错误时,jQuery就会调用200函数。我相信这是因为我发送了一个对象和状态代码。我该如何解决这个问题?
答案 0 :(得分:2)
首先猜测您需要在return;
块内的快速代码中使用if
语句。我打赌错误代码正在运行,然后成功代码和statusCode / body的最后一个值被发送到浏览器。