You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在jQuery POST请求后重新渲染EJS模板(Node.js+Express环境)

嘿,我明白你的需求啦——点击页面按钮发起POST请求后,用新数据重新渲染当前的EJS模板对吧?我给你整理了一套简化后的完整实现方案,分前后端两部分,你可以直接参考:

实现方案:点击按钮POST请求后重新渲染EJS模板

1. 后端(Express+EJS)配置与路由

首先确保你已经安装了必要依赖:npm install express ejs body-parser

下面是后端核心代码(比如app.js):

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// 配置EJS作为视图引擎
app.set('view engine', 'ejs');
app.set('views', './views'); // 指定你的EJS模板存放目录

// 解析POST请求的表单/JSON数据
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

// 模拟初始数据(实际项目替换为数据库查询)
let currentData = {
  listItems: ['示例项1', '示例项2', '示例项3']
};

// 初始路由:渲染页面
app.get('/', (req, res) => {
  res.render('main', currentData);
});

// 处理POST请求的路由:更新数据并重新渲染模板
app.post('/refresh-data', (req, res) => {
  // 这里替换成你的业务逻辑(比如SQL查询获取新数据),示例用模拟数据
  const newItem = req.body.customItem || `新增项${Date.now()}`;
  const updatedData = {
    listItems: [...currentData.listItems, newItem]
  };
  currentData = updatedData; // 实际项目建议用数据库持久化数据

  // 重新渲染模板,返回渲染后的HTML字符串
  res.render('main', updatedData);
});

app.listen(3000, () => {
  console.log('服务器运行在3000端口');
});

2. 前端EJS模板(views/main.ejs)

模板里包含交互按钮、数据展示区,以及jQuery的POST请求逻辑:

<!DOCTYPE html>
<html>
<head>
  <title>EJS重新渲染示例</title>
  <!-- 引入jQuery -->
  <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body>
  <h2>我的数据列表</h2>
  <div id="data-container">
    <ul>
      <% listItems.forEach(item => { %>
        <li><%= item %></li>
      <% }) %>
    </ul>
  </div>

  <button id="refresh-btn">点击刷新数据</button>

  <script>
    $(document).ready(() => {
      $('#refresh-btn').click(() => {
        // 发起POST请求,可携带自定义参数
        $.post('/refresh-data', { customItem: '自定义新增项' }, (responseHtml) => {
          // 方式1:替换整个页面内容
          // $('body').html(responseHtml);

          // 方式2:只替换需要更新的区域(体验更优)
          const newContent = $(responseHtml).find('#data-container').html();
          $('#data-container').html(newContent);
        })
        .fail((err) => {
          console.error('请求出错:', err);
          alert('数据更新失败,请重试');
        });
      });
    });
  </script>
</body>
</html>

关键注意事项

  • 服务器端渲染核心:因为EJS是服务器端模板引擎,所以POST请求后让后端重新渲染模板并返回HTML,是最贴合你需求的方式,不需要前端再处理模板渲染逻辑。
  • 局部更新优化:如果不想替换整个页面,像示例里的方式2那样,提取返回HTML中需要更新的区域进行替换,能获得更好的用户体验。
  • 数据持久化:示例用全局变量存数据仅作演示,实际项目一定要用数据库(MySQL、MongoDB等)来存储和读取数据,避免服务器重启后数据丢失。
  • 错误处理:实际开发中记得加上请求失败的处理逻辑,避免用户无感知的出错情况。

内容的提问来源于stack exchange,提问作者embraiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:27:04