这是我的代码,用于呈现视图并传递数据。
var x = '{"products":[{"id":"1"},{"id":"2"},{"id":"3"}]}';
res.render('home', {test:x});
这是我要循环显示数据的代码
<ul>
<% for(var i=0; i<test.products.length; i++) { %>
<li>
<%= test.products[i].id %>
</li>
<% } %>
</ul>
我一直无法读取未定义错误的属性“ length”。我在这到底是怎么了?
答案 0 :(得分:3)
x所引用的对象是一个字符串。您需要使用JSON.parse(test)
将其解析为JSON对象,在模板中使用以下形式:
for(var i=0; i<JSON.parse(test).products.length; i++)
或者,在设置变量x时,将其作为javascript对象传入:
var x = {"products":[{"id":"1"},{"id":"2"},{"id":"3"}]};
答案 1 :(得分:0)
您需要像这样使用 JSON.parse :
res.render('home', {test:JSON.parse(x)});
此外,您也可以像这样遍历对象数组:
var products=test.products;
for (var key in products) {
if (p.hasOwnProperty(key)) {
console.log(key + " -> " + p[key]);
}
}
答案 2 :(得分:0)
您已将变量x
定义为字符串,但是它应该是javascript对象。因此,您应先调用JSON.parse()
来转换其值,然后再将其传递给渲染引擎:
var x = '{"products":[{"id":"1"},{"id":"2"},{"id":"3"}]}';
res.render('home', { test: JSON.parse(x) });