在解析EJS模板中包含数据的JSON数组时,无法读取未定义的属性“长度”吗?

时间:2018-07-31 12:05:03

标签: node.js ejs

这是我的代码,用于呈现视图并传递数据。

    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”。我在这到底是怎么了?

3 个答案:

答案 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) });