後我的代碼片段通過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