Я использую jQuery на передней панели, чтобы сделать запрос на отправку AJAX, используя $ .post(). Я также передаю функцию успеха, которая будет делать что-то с возвращенными данными. На моем сервере node.js я использую выражение для обработки запросов, post request вызывает другую функцию, передающую обратный вызов, который в обратном вызове выполняет res.send(). Как я могу заставить запрос не закончаться, пока не будет выполнен обратный вызов?Дождитесь завершения обратного вызова node.js перед завершением запроса AJAX
Мой стороне клиента код:
$.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(). Убедитесь, что вы не звоните в другое место. –
Вы подтвердили, что обработчик почтовой группы фактически вызывается? – pdoherty926
Вы просматривали сетевой трафик в хром-инструментах разработчика или firebug, чтобы увидеть, как отправляется фактический XHR, и ответ, который он отправляет вам? было бы интересно посмотреть, как выглядит фактический ответ, и сравнить это с результатом, который вы видите в инструкции 'console.log (data)'. – guydog28