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

如何在EJS文件的script标签中访问传入的JSON数组?

解决EJS中script标签访问后端传入JSON数组的问题

你遇到的问题核心是后端传入的EJS变量没有正确转换成前端JavaScript可访问的对象,同时可能因作用域问题导致函数调用异常。下面分步骤帮你解决:

1. 确认后端变量传递正确

首先检查你的index.js是否正确将数组传递给EJS模板,代码应该类似这样:

// index.js
const express = require('express');
const app = express();
app.set('view engine', 'ejs');

app.get('/', (req, res) => {
  // 示例数组,替换成你的实际数据
  const targetArray = [{id: 1, content: "测试数据"}, {id: 2, content: "更多数据"}];
  // 关键:将数组以mJsonArr为键传递给EJS
  res.render('你的模板文件名', { mJsonArr: targetArray });
});

app.listen(3000);

2. 在EJS中正确引入数组到前端JS

EJS的变量是服务器端渲染的,不能直接在前端script里使用mJsonArr,需要用EJS语法把它转换成前端可解析的JSON格式。注意必须用<%- %>而非<%= %>——后者会转义引号,导致JSON格式损坏:

<!-- 你的EJS文件 -->
<button onclick="myFunc()">点击测试</button>

<script>
// 第一步:把EJS变量转成前端JS可识别的对象
const mJsonArr = <%- JSON.stringify(mJsonArr) %>;

// 第二步:定义全局作用域的函数,现在可以正常访问数组了
function myFunc() {
  console.log(mJsonArr);
  // 这里可以执行任何数组操作,比如遍历、取值
  mJsonArr.forEach(item => console.log(item.content));
}
</script>

3. 排查「myFunc未定义」的额外情况

如果还是出现Uncaught ReferenceError: myFunc is not defined,大概率是函数作用域问题:

  • 若你的script代码被包裹在局部作用域(比如document.addEventListener('DOMContentLoaded', function(){...})),onclick事件找不到全局的myFunc。这种情况建议改用事件监听绑定:
    <button id="testBtn">点击测试</button>
    
    <script>
    const mJsonArr = <%- JSON.stringify(mJsonArr) %>;
    
    // 通过DOM事件监听绑定,避免全局作用域问题
    document.getElementById('testBtn').addEventListener('click', function() {
      console.log(mJsonArr);
    });
    </script>
    
  • 另外检查数组是否存在循环引用:如果数组里的对象有循环引用,JSON.stringify会报错,需要先清理数据中的循环引用再传递。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:38:47