Render EJS - Узел JS - PullRequest
       12

Render EJS - Узел JS

0 голосов
/ 16 мая 2018

Я хотел бы обновить свое представление после вызова ajax, отображающего скомпилированные ejs с сервера.

Эти два предыдущих вопроса, кажется, достигают этого, но я не могу обновить свое представление

Невозможно отобразить шаблон EJS на клиенте

Как создать контент на ejs с помощью jquery после вызова ajax на экспресс-сервер

Итак, насколько я понимаю, ядолжен скомпилировать мой ejs-файл (частичный) на сервере.

fixtures.ejs

<% fixtures.forEach((fixture) => { %>
  <h2><%= fixture.home_team %> vs <%= fixture.away_team %></h2> 
<% }) %>

index.js

app.post('/league_fixtures', async function (req, res) {
  try {
    var league_name = req.body.league_name;
    const fixtures = await leagueFixtures(league_name);

    //compile view
    fs.readFile('./views/fixtures.ejs', "utf-8", function(err, template) {
      fixture_template = ejs.compile(template, { client: true });
      var html = fixture_template({fixtures: fixtures});
      console.log(html);
      // This logs out my HTML with fixtures so I am almost there
      // <h2>Club Africain vs Al-Faisaly Amman</h2>
      // <h2>Al Nejmeh vs ASAC Concorde</h2>
    });
    res.json({fixtures: fixtures });
  } catch (err) {
    res.status(500).send({ error: 'Something failed!' })
  }
});

Ajax

$("a.league-name").on("click", function (e) {
  e.preventDefault();
  var league_name = $(this).text().trim();

  $.ajax({
    url: '/league_fixtures',
    type: 'POST',
    dataType: "json",
    data: { league_name: league_name },
    success: function(fixtures){
     // How do i get HTML from server into here ?
      $('#panel_' + league_name).html(fixtures);
  },
    error: function(jqXHR, textStatus, err){
      alert('text status '+textStatus+', err '+err)
    }
  })
 });
});

Я не получаю никаких ошибок при запуске ajax-запроса, но я также не получаю обновленные данные или HTML в моем div

Может кто-нибудь увидеть, что я делаю неправильно?

Спасибо

1 Ответ

0 голосов
/ 17 мая 2018

Итак, я наконец-то получил рабочее решение:

index.js

app.post('/league_fixtures', async function (req, res) {
  try {
    const league_name = req.body.league_name;
    const fixtures = await leagueFixtures(league_name);
    const file = await readFile('./views/fixtures.ejs');
    var fixture_template = ejs.compile(file, { client: true });
    const html = fixture_template({fixtures: fixtures});
    res.send({ html: html });
  } catch (err) {
    res.status(500).send({ error: 'Something failed!' })
  }
});

ajax call

$.ajax({
  url: '/league_fixtures',
  type: 'POST',
  dataType: "json",
  cache: true,
  data: { league_name: league_name },
  success: function(fixtures){
    var html = fixtures['html'];
    $('#panel_' + league_name).html(html);
  },
  error: function(jqXHR, textStatus, err){
    alert('text status '+textStatus+', err '+err)
  }
})
...