【问题标题】:Reload page with new context in express在 express 中使用新上下文重新加载页面
【发布时间】:2015-08-15 04:19:36
【问题描述】:

我有一个列出事件的页面,管理员可以在其中通过 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 发出发布请求时,所有请求处理程序都被调用,事件被成功删除,但没有重新加载。我是否误解了 res.render() 的作用?

当我发出 post 请求时,我也尝试在我的 jQuery 代码中使用成功处理程序,使用来自 deleteCtrl 的 res.redirect(),但在这种情况下我的上下文未定义。

【问题讨论】:

    标签: ajax node.js express


    【解决方案1】:

    一般来说,这不是最佳做法。您要做的是协调数据。如果删除成功,则只需splice 将对象从它存在于客户端的数组中取出。一种替代方法是实际发回刷新的数据集:

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

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

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

    【讨论】:

      【解决方案2】:

      在客户端,您正在使用

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

      当收到来自帖子的响应时,此代码不会指示浏览器执行任何操作。所以浏览器中没有任何可见的事情发生。

      你的问题不在服务器端;服务器用上下文对象回答。你根本没有对这个答案做任何事情。

      尝试简单地添加一个successHandler。

      【讨论】:

      • 谢谢,原来这是我一开始做的,但不知何故我弄错了网址,所以它给了我一个未定义的。
      猜你喜欢
      • 2020-01-04
      • 2016-06-30
      • 2012-09-10
      • 2016-06-08
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多