如何在EJS中仅渲染<%-body%>标签,实现无刷新修改页面主体内容?
EJS 局部渲染相关问题解答
关于仅渲染<%- body %>的支持情况
EJS 本身是服务端模板引擎,默认不支持浏览器端仅局部渲染<%- body %>标签。它的核心渲染逻辑是服务端拼接完整 HTML 后返回给浏览器,常规页面请求场景下必然会触发整页刷新。
无整页刷新修改主体内容的实现方案
你可以结合前端请求 API 配合服务端改造实现需求,具体操作如下:
- 服务端新增单独返回 body 内容的接口:针对每个侧边栏对应的路由,新增一个只渲染
<%- body %>部分、不包裹布局模板的接口,返回纯 HTML 片段 - 前端拦截侧边栏链接的点击事件:阻止默认的跳转行为,用
fetch或XMLHttpRequest调用上一步对应的接口获取 body 的 HTML 片段 - 替换页面主体内容:将获取到的 HTML 直接赋值给主体区域 DOM 元素的 innerHTML 属性即可
如果你用的是 Express 框架搭配 EJS,可以直接在渲染时关闭布局来输出纯内容片段:
// 常规渲染(带全局布局,返回完整页面) app.get('/page', (req, res) => { res.render('page', { layout: 'main' }) }) // 局部渲染接口(仅返回body内容片段) app.get('/page/fragment', (req, res) => { res.render('page', { layout: false }) })
如果你的项目默认启用了布局中间件,单独给片段接口关闭布局即可,不需要额外修改现有 EJS 模板逻辑。
内容的提问来源于stack exchange,提问作者Marco Sardido
相关产品推荐
相关产品推荐

