如何在ajax请求后用新数据重新呈现.ejs页面

时间:2019-04-07 01:32:31

标签: javascript node.js ajax express ejs

在ajax请求之后,我需要在服务器端用新数据重新渲染homepage.ejs。我知道您可以(以某种方式)重新呈现ajax回调中的元素,但是我想知道是否可以重新呈现homapage.ejs,因为我有if语句寻找休假,并且current_user变量设置了正确的partialview.ejs < / p>

我的Ajax方法:

function user_login(email, password) {
  var data = {};
  data.email_login = email;
  data.password_login = password;
  var message_header = $("#message_header");
  $.ajax({
    url: "/sign_in",
    method: 'POST',
    data: data
  }).done(function (res) {
    if (!res.success) {
      message_header.text("Incorrect email of password. Please try again.").css("color", "red");
      $("#username_textfield").val("");
      $("#password_textfield").val("");
    } 
    if (res.success) {
      console.log("user logged");
    }
  });

我的服务器端(在查询回调中)

get_all_vacations(function (error, vacations) {
  if (error) {
    console.log("error when getting vacations " + error);
    response.json({ success: false });
  } else {
    request.session.vacations = vacations;
    response.render('the_vacation.ejs', { vacations : vacations, current_user : new_current_user }, function() {
      response.json({success : true});
      console.log("in render method");
    });      
  }
});

我尝试了这个,但是没有用。

response.render('the_vacation.ejs', { vacations: vacations, current_user: new_current_user });

1 个答案:

答案 0 :(得分:0)

根据登录代码的编写方式,我认为最简单的方法是在登录成功后使用window.location.reload();

function user_login(email, password) {
  var data = {};
  data.email_login = email;
  data.password_login = password;
  var message_header = $("#message_header");
  $.ajax({
    url: "/sign_in",
    method: 'POST',
    data: data
  }).done(function (res) {
    if (!res.success) {
      message_header.text("Incorrect email of password. Please try again.").css("color", "red");
      $("#username_textfield").val("");
      $("#password_textfield").val("");
    } 
    if (res.success) {
      console.log("user logged");
      window.location.reload(); // <--- Cause the browser to reload the EJS
    }
  });