我在下面的EJS中有代码,

<script>
    var row =<%-JSON.stringify(data)%>
    console.log(row);
</script>
<% for(var i=0; i<JSON.stringify(data).length; i++) {%>
   <tr>
     <td>
       <%= JSON.stringify(data)[i].id%>
     </td>
   </tr>
<% } %>

行的输出是正确的,一个由3个对象组成的数组,每个对象都有属性id、名称等..我可以在JS中操纵行来计算表的大小.然而,我想知道是否有一种方法可以让它以上述方式完成?

当我运行上面的代码时,JSON.使(数据)字符串化.长度不是3,而是整根绳子的长度.

另一个问题是当我试图添加

<% alert('t'); %> or <% window.alert('t'); %>, it gives me 'not defined' error...

谢谢.

当做

推荐答案

JSON.stringify返回String.例如:

var data = [
    { id: 1, name: "bob" },
    { id: 2, name: "john" },
    { id: 3, name: "jake" },
];

JSON.stringify(data)

将返回相当于:

"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]"

作为一个String的值.

所以当你有

<% for(var i=0; i<JSON.stringify(data).length; i++) {%>

最终的结果是:

<% for(var i=0; i<"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]".length; i++) {%>

这大概是你想要的not.你可能想要的是这样的:

<table>
<% for(var i=0; i < data.length; i++) { %>
   <tr>
     <td><%= data[i].id %></td>
     <td><%= data[i].name %></td>
   </tr>
<% } %>
</table>

这将输出下表(使用上面的示例data):

<table>
  <tr>
    <td>1</td>
    <td>bob</td>
  </tr>
  <tr>
    <td>2</td>
    <td>john</td>
  </tr>
  <tr>
    <td>3</td>
    <td>jake</td>
  </tr>
</table>

Node.js相关问答推荐

如何将我的Redis客户端配置为在禁用群集模式的情况下使用读取副本?

车把模板引擎循环问题

Gulp 能否向 Docker 发出增量构建的第一次迭代完成的信号?

在对象数组中的数组中嵌套 $lookup - Mongodb

在快速路由中使用 axios 会在数据字段中返回特殊字符而不是 json

如何在没有云功能的情况下使用 Google PubSub

如何让我的 Next.js 应用在运行 ubuntu-latest 的 Azure 应用服务中启动?

Mongoose,如何一次更新多个?

在安装 tensorflow 时遇到问题

Ansible 将以什么用户身份运行我的命令?

Nodejs-console.error vs util.debug

在 ExpressJS 中将变量传递给 JavaScript

Mongoose:查找、修改、保存

容器之间的 Docker HTTP 请求

使用 Webpack 和 font-face 加载字体

使用 NodeJS 将新对象附加到 DynamoDB 中的 JSON 数组

按日期时间字段获取最新的 MongoDB 记录

npm package.json 操作系统特定脚本

在 Node 中连接和缩小 JS 文件

续集findbyid不是一个函数,但显然findAll是