使用express中的新上下文重新加载页面

时间:2015-06-01 16:00:07

标签: ajax node.js express

我有一个列出事件的页面,管理员可以使用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代码中尝试使用成功处理程序,当我发出post请求时,使用deleteCtrl中的res.redirect(),但在这种情况下我的上下文是未定义的。

2 个答案:

答案 0 :(得分:2)

在客户端,您正在使用

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

当收到来自帖子的回复时,此代码不会指示浏览器执行任何操作。因此浏览器中没有任何可见的内容。

您的问题不在于服务器端;服务器使用上下文对象进行回答。你只是没有做这个答案。

尝试简单地添加successHandler。

答案 1 :(得分:0)

一般来说,这不是最佳做法。你想要做的是协调数据。如果删除成功,那么只有splice数组中的对象存在于客户端。另一种方法是实际发回一个刷新的数据集:

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

然后在客户端,在回调中,您实际上只是根据结果设置数据源:

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