将数组从EJS传递给Javascript

时间:2016-07-04 08:07:13

标签: javascript arrays node.js express ejs

我试图将一个数组从ejs传递给JavaScript。我可以使用ejs中的值,但不能使用JavaScript。因为变量“test”的内容是字符串不是数组所以我一直都未定义。

<script>

var test = '<%- level_tab %>';
alert(test);

function level(s1,s2){
            var s1 = document.getElementById(s1);
            var s2 = document.getElementById(s2);
            s2.innerHTML = "";
            if(s1.value == "level_0"){
                var optionArray = test;
            }
            else if(s1.value == "level_1"){
                var optionArray = ["test|test01", "test0|test02"];
            }
 for(var option in optionArray){
                var pair = optionArray[option].split("|");
                var newOption = document.createElement("option");
                newOption.value = pair[0];
                newOption.innerHTML = pair[1];
                s2.options.add(newOption);
            }
        }
</script>

5 个答案:

答案 0 :(得分:4)

你必须对数组进行字符串化

var test = <%- JSON.stringify(level_tab) %>;

我不熟悉EJS,但总的来说,即使EJS中的语法略有不同,也应该适用相同的原则。

答案 1 :(得分:0)

我这样处理将数组从express传递到EJS页面: 在node.js代码中:

.post('/action', function(req, res) {
        var arr = ["premier", "second", "troisième", "quatrieme", "cinquieme"];
        res.render('page.ejs', {arr: arr}); 
});

在page.ejs中:

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

答案 2 :(得分:0)

我找到了解决方案,但我不知道是否还有其他办法可以解决。 我改变了

var test = '<%- level_tab %>';

通过这个循环,

<% for(var j=0; j<level_tab.length; j++) { %>
            level_tab.push('<%- level_tab[j]%>');
<%}%>

答案 3 :(得分:0)

请参阅JSON from EJS to JSON object in JS

删除单引号:

var test =&lt;% - JSON.stringify(level_tab)%&gt ;;

答案 4 :(得分:0)

使用它可以正常工作。(不要使用单引号)

        var test = <%-JSON.stringify(level_tab) %>; 
        console.log("test :"+test);