EJS模板script标签内循环变量i无法读取gsdata对应属性问题求助
问题根本原因
EJS是服务端运行的模板引擎,所有包含在<% %>/<%- %>里的代码都会在页面下发到浏览器之前,在服务端完成执行渲染。而你写的for循环里的变量i是浏览器端运行的JavaScript变量,执行时机远晚于EJS的渲染时机:
- 当EJS渲染时,前端的
i还没有被定义,自然无法用gsdata[i]动态取值 - 写固定下标
gsdata[1]时,EJS可以在服务端直接定位到数组的对应元素,渲染成具体值后下发到浏览器,所以可以正常运行
另外你原有代码还存在逻辑问题:data变量在for循环内部定义,每次循环都会被覆盖,最终仅能保留最后一条数据。
修复方案
不需要在EJS中逐个读取数组元素,直接把整个gsdata数组序列化后输出到前端全局作用域即可,修改后的代码如下:
<script> // 服务端直接把完整gsdata序列化输出给前端 const gsdata = <%- JSON.stringify(gsdata) %>; $(document).ready(function() { const Results = []; // 前端循环组装数据 for (let i = 0; i < gsdata.length; i++) { Results.push({ "SCRIP": gsdata[i].SCRIP, "LTP": gsdata[i].LTP, "ALERT": gsdata[i].CAMARILLA, "TRIGERP": gsdata[i].ALERT, "BOOKAT": gsdata[i].BOOKAT, "PROFIT": gsdata[i].PROFIT, }) } $('#scrip-data').DataTable({ data: Results, columns: [ {data: "SCRIP"}, {data: "LTP"}, {data: "ALERT"}, {data: "TRIGERP"}, {data: "BOOKAT"}, {data: "PROFIT"}, ], }); }); </script>
内容的提问来源于stack exchange,提问作者Siba Swain
相关产品推荐
相关产品推荐

