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

EJS文件script标签内如何让循环变量i在<%= %>语法中生效?

问题原因

你遇到的问题本质是服务端EJS渲染和客户端JS执行的时序差异导致的:

  • EJS的所有<% %>相关语法都在服务端渲染阶段执行,此时客户端的JS代码还未运行,你代码中for循环里的i是客户端JS的变量,服务端渲染时无法识别这个值,自然不能正常解析。
解决方法

你可以先把服务端的classGroup.docs数组整体通过JSON序列化传递给客户端,之后直接在客户端JS中遍历该数组即可,修改后的代码如下:

<script>
    // 先将服务端的docs数组完整传递给客户端,使用<%- %>避免HTML转义破坏JSON格式
    const docs = <%- JSON.stringify(classGroup.docs) %>;
    // 客户端侧直接遍历数组即可
    for(let i = 0 ;i < docs.length;i++) { 
        let chunk = docs[i].weight;
        console.log('weight : ' + chunk);
    }
</script>
注意事项
  • 序列化传递对象时必须使用<%- %>而非<%= %>,后者会对输出内容做HTML转义,将JSON中的引号等字符转译为实体符,导致JSON格式失效。
  • 如果你需要用到classGroup的其他字段(比如totalDocs),也可以直接把整个classGroup对象序列化传递给客户端:const classGroup = <%- JSON.stringify(classGroup) %>;,后续就可以直接调用classGroup.totalDocs、classGroup.docs等属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 16:24:04