不能在html scripttag中将EJSvariables推入数组中?

我正在试图build立一个与OpenLayers叠加使用一些testing坐标的数组。

这是代码:

var parada = []; for(var i = 0; i < <%- coords.length%>; i++){ //First loop to fill the array var arr = [<%- coords[i].lon %>, <%- coords[i].lat %>]; //THIS IS THE ERROR LINE! ... says the console... parada.push(arr); } var overlays = []; for (i = 0; i < parada.lenght; i++) { //Second loop to build the overlays overlays.push(new ol.Overlay({ position: ol.proj.fromLonLat([parada[i][0], parada[i][1]]), //With the data of the array above positioning: 'center-center', element: document.getElementById('parada' + i), stopEvent: false })); } for (i = 0; i<overlays.length; i++){ // Last loop to assign the overlays. map.addOverlay(overlays[i]); } 

重要提示:在我的app.js文件中,coords被定义为一个对象数组(我在MongoDB中find({})。

我真的卡在这里请帮助! 谢谢! :DDD

你的variablesi存在于客户端JS中,而不是在服务器端JS中。

有各种各样的方法可以解决这个问题,其中之一是:

 var parada = <%- JSON.stringify(coords.map(function(pair) { return [pair.lon, pair.lat]; })) %>; 

我假设lonlat总是会成为数字,所以没有注射攻击的风险。

或者,您可以在调用模板之前进行转换,使模板本身保持复杂性。

顺便说一句,你也有一个打字错误。

进行了更改,以便在客户端处理数据会更容易。

 var lon = []; var lat = []; for (var i = 0; i < <%=lon.length%>; i++ ) {<%for(var x = 0; x < lon.length ;x++) { %> lon.push(<%= lon[x] %>); lat.push(<%= lat[x] %>); <% } %>} 

这样我在客户端用EJS构build一个数组。

 //Create the Overlays Array var overlays = []; for (var i = 0; i < <%=lon.length%>; i++ ) { overlays.push(new ol.Overlay({ position: ol.proj.fromLonLat([lon[i], lat[i] ]), positioning: 'center-center', element: document.getElementById('parada' + i), stopEvent: false })); } 

然后,我可以简单地使用这个数组,只要我需要。

感谢@skirtle的帮助,你让我了解了这个问题;)