我有一段代码,通过Jquery发送DELETE
请求,如下所示:
$(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);
}
});
在我的应用程序中更新了一个中间件之前,这个工作正常。
我使用以下代码段在我的app.js
文件中为我的程序提供了MongoDB:
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(); });
现在SUCCESS
请求的AJAX
部分不再有效。
我认为这是因为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);
});
});
答案 0 :(得分:1)
我不知道如何解决您的问题,但也许您可以通过在AJAX调用中添加error
处理程序来获得一些洞察力:
$.ajax({
url: '/formula-list/' + this.id,
type: 'DELETE',
success: reload,
error: function() {
console.log(arguments);
}
});
如果AJAX成功处理程序以前工作过,而不再存在,则很可能发生错误。希望这有帮助!
答案 1 :(得分:0)
尝试执行complete: function(){reload}
之类的操作,这样ajax会在完成删除功能后重新加载。
(旁注:之前我遇到过这类问题而且只能在某些浏览器上运行,因为其他浏览器不支持delete
方法)
希望它有所帮助!
答案 2 :(得分:0)
根据我的问题的评论,问题是我没有明确地根据我的请求创建任何类型的响应,这就是问题所在。
我所要做的只是将res.end()
添加到我的快递片段中,问题就解决了。
这就是诀窍:
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){
assert.equal(null, err);
assert.equal(1, r.modifiedCount);
});
res.end();
});