【问题标题】:How to use node.js variable in a function on the client side?如何在客户端的函数中使用 node.js 变量?
【发布时间】:2019-07-20 12:39:59
【问题描述】:

我有一个相当奇怪的问题。 在服务器端,我调用了一个 ejs-page by

res.render('index', {varArray: JSON.parse(response)});

当我尝试在 HTML 代码中使用变量“varArray”时,一切正常,例如:

<% for (var i = 0; i < varArray.length; i++) { %>
    <option value="<%= varArray[i].id %>"><%= varArray[i].name %></option>
<% } %>

但是:当我想在同一页面上的函数中使用相同的变量时,我会收到一条错误消息,指出该变量未定义。

<body>
<script>
function test() {
  for (var i = 0; i < varArray.length; i++) {
// do something
  }
};
</script>

希望有人能帮帮我。

【问题讨论】:

  • 看起来您正在尝试混合客户端和服务器端代码。在客户端上运行的代码无法访问服务器上声明的变量。
  • 把它放在 DOM 中的某个地方(就像一个隐藏的输入),并在运行时取出值。您正在尝试混合客户端和服务器运行时。
  • 要进行客户端操作,您真的应该在 Vue.js、Angular 或 React 上投入一些时间。这些都是允许您将 JS 代码与 DOM 集成的框架(当然不是您拥有的方式)。

标签: javascript node.js express ejs


【解决方案1】:

不幸的是,我无法在 ejs 中测试它,但如果它是一个 JavaScript 数组,你可以......

  1. JSON.stringify()变量,
  2. 打印字符串到dom
  3. 将其分配给所需范围内的变量。

<% for (var i = 0; i < varArray.length; i++) { %>
    <option value="<%= varArray[i].id %>"><%= varArray[i].name %></option>
<% } %>

<script>
var varArray = <%= JSON.stringify(varArray) %>;

function test() {
  for (var i = 0; i < varArray.length; i++) {
// do something
  }
};
</script>

如果 test() 函数不是通过 ejs 呈现的,那么您可以将它分配给全局对象 (window),然后在它被定义后的任何地方使用它...

<% for (var i = 0; i < varArray.length; i++) { %>
    <option value="<%= varArray[i].id %>"><%= varArray[i].name %></option>
<% } %>

<script>
window.varArray = <%= JSON.stringify(varArray) %>;
</script>

<script>
function test() {
  for (var i = 0; i < varArray.length; i++) {
// do something
  }
};
</script>

【讨论】:

  • 这对我帮助很大!最后我在你的帮助下发现,我必须将“varArray”作为参数传递给函数。它不可全局访问。
  • 很高兴我能帮上忙!如果这是您的“接受”,请记住在某个时候将其标记为这样
猜你喜欢
  • 2016-06-23
  • 2011-06-23
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-20
  • 2018-11-02
相关资源
最近更新 更多