从 EJS 传递数组到 Javascript

5

我正在尝试将一个数组从ejs传递到JavaScript。我可以在ejs中访问值,但无法从JavaScript中访问。始终返回undefined,因为变量"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个回答

16

您需要将数组转换为字符串

var test = <%- JSON.stringify(level_tab) %>;
我对EJS不熟悉,但通常即使在EJS中语法稍有不同,相同的原则也应适用。

@amine_detter 我编辑了这篇文章 - 你尝试过去掉引号吗? - razakj
1
太好了,现在它可以工作了,但是编辑器(WebStorm)指出有一个错误,所以我使用单引号。无论如何,谢谢。 - amine_detter

5

它可以工作,但是编辑器(WebStorm)表示有一个错误,所以我使用单引号。谢谢。 - amine_detter

2

使用这个,它会很好地工作。(不要使用单引号)

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

1
我找到了一个解决方案,它有效,但我不知道是否有其他方法可以实现。我更改了

标签。
var test = '<%- level_tab %>';

通过这个循环,
<% for(var j=0; j<level_tab.length; j++) { %>
            level_tab.push('<%- level_tab[j]%>');
<%}%>

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>
<% } %>

不是我想要的,问题是将这个数组“arr”传递到JavaScript中的另一个数组。 - amine_detter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接