后我的代码片段通过jQuery发送DELETE
请求,看起来像这样:AJAX请求没有完成添加快捷中间件
$(document).ready(function(){
$('.formula-block').on('click', function(e){
if (e.target.className == 'button-warning pure-button') {
$.ajax({
url: '/formula-list/' + this.id,
type: 'DELETE',
success: reload
});
}
});
function reload() {
window.location.reload(true);
}
});
这工作得很好,直到我在我的应用程序更新的一个中间件的。
我用下面的代码片断做出的MongoDB提供给我的计划,我app.js
文件:
app.use((req, res, next) => {
mongo.connect('mongodb://localhost:27017/formulas', (e, db) => {
if (e) return next(e);
req.db = db;
next();
});
});
不过,我最近添加下面的代码行的最后一对括号前
req.on('end',() => { req.db.close(); });
现在我的AJAX
请求中的SUCCESS
部分不再有效。
我认为这是因为AJAX请求正在等待响应,并没有得到它,因为最后一行剪辑它,所以success
永远不会被调用。
我的主要问题是,我希望页面刷新后的项目更新后的东西被删除。我不知道这是怎么发生的,但现在我的安排不再有效。
如果有帮助,下面是收到的DELETE
请求的服务器端代码:
router.delete('/formula-list/:id', function(req, res){
var db = req.db.collection('users');
var f_id = new ObjectID(req.params.id);
db.updateOne({"_id": new ObjectID(req.user.id)}, { $pull: {
"formulas": {"f_id": f_id}
}}, function(err, r){
if(err) {throw err;}
assert.equal(null, err);
});
});
看在Chrome调试器的网络选项卡,看看你是否得到任何回应从您的AJAX调用回,如果是这样,这种反应是什么。你首先需要知道什么是回到客户端,或者问题是没有响应发送。 – jfriend00
你在调用'res.send'吗?顺便说一句,在尝试关闭连接或侦听连接回调中的req end事件之前,您应该检查db是否在req中定义。 –
我没有看到任何地方你实际发送的请求响应。直到你在服务器上执行'res.send(...)',浏览器才会知道请求已经完成。所以,当你的数据库操作完成时,你应该'res.send()'回到客户端,以便知道请求已完成。 – jfriend00