我在下面的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.stringify(data).length不是3,而是整个字符串的长度。
另一个问题是当我尝试添加
时&lt;%alert(&#39; t&#39;); %GT;或&lt;%window.alert(&#39; t&#39;); %&gt;,它让我没有定义&#39;错误...
帮助表示赞赏。
此致 锤
答案 0 :(得分:68)
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++) {%>
可能不你想要什么。你可能做想要的是这样的:
<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>
答案 1 :(得分:1)
就我而言,datas
是数组的对象,有关更多信息,请Click Here
<% for(let [index,data] of datas.entries() || []){ %>
Index : <%=index%>
Data : <%=data%>
<%} %>
答案 2 :(得分:0)
JSON.stringify(data).length返回字符串长度而不是对象长度,可以使用Object.keys。
<% for(var i=0; i < Object.keys(data).length ; i++) {%>
答案 3 :(得分:0)
我在选择上创建动态选项的方法是:
<optgroup label="Select Table">
<% for(var i=0; i<doctors.length; i++) {%>
<% fullname = doctors[i].surname + doctors[i].name %>
<option name="doctor" value=" <%= fullname%> "><%= fullname%></option>
<% } %>
</optgroup>
我已经发送了响应中的数据,我只是使用 for 循环对其进行迭代。