【发布时间】:2013-09-26 08:00:33
【问题描述】:
我在前面使用 jQuery 来使用 $.post() 发出 AJAX 发布请求。我还传递了一个成功函数,它将对返回的数据做一些事情。在我的 node.js 服务器上,我使用 express 来处理请求,发布请求调用另一个传递回调的函数,该回调在回调中执行 res.send()。如何让请求在回调完成之前不完成?
我的客户端代码是:
$.post("/newgroup/", {name: newgroupname}, function(data) {
console.log(data); // Returns undefined because requests ends before res.send
});
我的服务器端代码是:
app.post('/newgroup/', function(req, res){
insertDocument({name:req.body.name, photos:[]}, db.groups, function(doc){
res.send(doc);
});
});
insertDocument函数是:
function insertDocument(doc, targetCollection, callback) {
var cursor = targetCollection.find( {}, {_id: 1}).sort({_id: -1}).limit(1);
cursor.toArray(function(err, docs){
if (docs == false){
var seq = 1;
}
else {
var seq = docs[0]._id + 1;
}
doc._id = seq;
targetCollection.insert(doc);
callback(doc);
});
}
【问题讨论】:
-
我觉得还有别的。在调用 res.send() 之前,该响应应该发送任何内容。 $.post() 应该等待 res.send()。确保你没有在其他地方调用它。
-
您是否验证了新闻组帖子处理程序实际上正在被调用?
-
您是否查看过 chrome 开发人员工具或 firebug 中的网络流量以查看实际发送的 XHR 以及它发回给您的响应?看看实际响应是什么样的,并将其与您在
console.log(data)语句中看到的结果进行比较会很有趣。
标签: ajax node.js jquery express