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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:30:01