如何从ajax帖子更新A Jade模板?

时间:2011-03-10 20:27:06

标签: node.js pug express

我使用express使用默认的视图引擎jade设置了一个基本的node.js web-app。

当用户首次加载页面时,会发生以下情况

app.get('/', function(req, res){
    res.render('index', {
        title: 'Test',
        mode: "user"
    });
});

我无法解决的是如何更改我最初从ajax调用传递到jade模板的参数。

app.post('/', function(req, res){
    console.log(req.body.list);
    res.redirect('back');
    // I imagine the code needs to go here and look somewhat like the following
    // 
    // res.?update-view({
    //  mode: "admin"
    // });
});

如果有人有这方面的工作经验,我们将不胜感激。

3 个答案:

答案 0 :(得分:4)

我不确定你在追求什么,但是如果它用AJAX调用的结果更新页面(不刷新或以其他方式重新加载页面)那么你将不得不使用客户端JavaScript 。 jQuery的load()post()应该能够处理它。

或者,如果您没有使用AJAX,而是执行普通表单提交,那么您有几个选择。一,您可以保留重定向并使用Express / Connect的Sessions系统来确定用于获取请求的内容,或者两个可以将重定向替换为index.jade页面的另一个res.render并包含你想要改变的变量。

应该理解,在其中任何一个发生后,node.js放弃对浏览器的网页控制,除非你专门设置通信架构。 node.js中目前没有控件可以强制更新或页面更改到客户端。除了通过套接字连接或除非客户端本身进行其他轮询(例如在第一个涉及jQuery的示例中)。

答案 1 :(得分:1)

假设您要显示同一页面,使用其他“模式”

// set the page title for all requests
app.locals({ title: 'Test' });

// GET request
app.get('/', function(req, res){
  res.render('index', {
    // displays the default "user" mode
    mode: 'user'
  });
});

// when POST is submited
app.post('/', function(req, res){
  // this is the param given by the user
  console.log(req.body.list);

  // now render the same page
  res.render('index', {
    // with mode set to the the given parameter
    mode: req.body.list
  });
});

答案 2 :(得分:0)

您可以使用类似下面的内容,或者如果您想使用AJAX调用,只要有响应就使用jQuery ajax

<强>客户端

script(type="text/javascript")
  $(document).ready(function(){
    //...AJAX here....
    var newValue = #{value} + 10;
  });

服务器

app.get('/ajax', function(req, res){
 //This is where your code and response go
});