Как мне обновить Jade Template из сообщения ajax? - PullRequest
7 голосов
/ 10 марта 2011

Я настроил базовое веб-приложение node.js, используя Express с движком представления по умолчанию Jade.

Когда пользователь впервые загружает страницу, происходит следующее

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

Что я не могу понять, так это как изменить параметр, который я изначально передал в шаблон Jade из вызова ajax.

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 ]

4 голосов
/ 15 марта 2011

Я не совсем уверен, что вы ищете, но если он обновляет страницу с результатами вызова AJAX (который не обновляет или иным образом перезагружает страницу), то вам придется использовать клиентский JavaScript , jQuery's load () или post () должен справиться с этим.

Кроме того, если вы не используете AJAX, а вместо этого выполняете обычную отправку формы, у вас есть несколько вариантов. Во-первых, вы можете сохранить перенаправление в системе и использовать систему Sessions Express / Connect, чтобы определить, что используется для запроса get, или два, вы можете заменить перенаправление другим res.render страницы index.jade и включите переменную, которую вы хотите изменить.

Следует понимать, что после того, как все это произойдет, node.js передает управление веб-страницей браузеру, если вы специально не настроили архитектуру для связи. В настоящее время в файле node.js нет элементов управления, которые бы принудительно передавали обновления или изменения страницы клиенту. За исключением соединений через сокеты или если иным образом не опрошен самим клиентом (например, в первом примере с использованием jQuery).

1 голос
/ 19 апреля 2013

При условии, что вы хотите отобразить ту же страницу с другим «режимом»

// 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
  });
});
0 голосов
/ 13 сентября 2011

Вы можете использовать что-то вроде следующего, или если вы хотите использовать вызов 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
});
...