2015-06-01 26 views
2

我有一個列出事件的頁面,管理員可以使用AJAX調用刪除單個項目。我想在事件被刪除時重新加載頁面,但是我目前對express的'通常req,res和next'的理解有困難。使用新的上下文在快遞中重新加載頁面

這是我目前的執行(簡體):

簡單的jQuery代碼:

$(".delete").click(function(e){ 
    $.post("/events/delete",{del:$(this).val()}) 
}) 

在我的路線文件:

function eventCtrl(req,res){ 
    Event.find({}).exec(function(err,events){ 
     ... 
     var context = { 
      events:events, 
      ... 
     } 
     res.render('events',context); 
    }); 
} 

function deleteCtrl(req,res,next){ 
    Event.findById(req.param("del")).exec(function(err,event){ 
     // delete my event from google calendar 
     ... 
     event.remove(function(err){ 
      ... 
      return next(); 
     }); 
    }); 
} 

app.get('/events',eventCtrl); 
app.post('/events/delete',deleteCtrl,eventCtrl); 

當我做與AJAX POST請求所有req處理程序被調用,事件被成功刪除,但沒有重新加載。我誤解了res.render()做了什麼?

我也嘗試過在我的jQuery代碼中使用成功處理程序,當我發出請求時,使用來自deleteCtrl的res.redirect(),但是在這種情況下我的上下文未定義。

回答

1
在客戶端

,您使用的

$(".delete").click(function(e){ 
    $.post("/events/delete",{del:$(this).val()}) 
}) 

這個代碼不指示瀏覽器接收到來自後的反應時,做任何事情。因此瀏覽器中沒有可見的事情發生。

你問題不在服務器端;服務器用上下文對象回答。你根本就沒有對這個答案做任何事情。

嘗試簡單地添加一個successHandler。

+0

謝謝,事實證明,這是我最初做的,但我不知何故得到了錯誤的網址,所以它給了我一個未定義的。 – wdonahoe

0

一般來說,這不是一個最佳做法。你想要做的是調和數據。如果刪除成功,那麼只需將splice中的對象移出它存在於客戶端的數組中。一個替代辦法是實際發送回一個刷新的數據集:

res.json(/* get the refreshed data set */); 

然後客戶端,在回調中,你實際上只是設置數據源(一個或多個)備份根據結果:

... myCallback(res) { 
    // refresh the data source(s) from the result 
}