Reputation: 147
I am trying to passe an array from ejs to JavaScript. I can get to the values inside ejs but not from JavaScript. all the time i get undefined because the contents of the variable "test" is a string is not an array.
<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>
Upvotes: 5
Views: 18997
Reputation: 1049
You have to stringify the array
var test = <%- JSON.stringify(level_tab) %>;
I'm not familiar with EJS but in general the same principle should apply even if syntax is slightly different in EJS.
Upvotes: 16
Reputation: 165
Use this it will work fine.(Don't use single quotation )
var test = <%-JSON.stringify(level_tab) %>;
console.log("test :"+test);
Upvotes: 2
Reputation: 3020
Refer to JSON from EJS to JSON object in JS
Remove the single quote:
var test = <%- JSON.stringify(level_tab) %>;
Upvotes: 5
Reputation: 147
i found a solution it's work, but i don't know if there is other ways to do it. i change
var test = '<%- level_tab %>';
by this loop,
<% for(var j=0; j<level_tab.length; j++) { %>
level_tab.push('<%- level_tab[j]%>');
<%}%>
Upvotes: 1
Reputation: 4612
I process like that to pass array from express to an EJS page: in the node.js code :
.post('/action', function(req, res) {
var arr = ["premier", "second", "troisième", "quatrieme", "cinquieme"];
res.render('page.ejs', {arr: arr});
});
And in page.ejs :
<% for(var i = 0 ; i < arr.length ; i++) { %>
<tr>
<td><%= arr[i] %></td>
</tr>
<% } %>
Upvotes: 0