将res.locals变量传递给GoggleMaps会破坏initMap函数

时间:2017-03-08 18:07:10

标签: javascript node.js google-maps express

我在使用Google Map initMap功能时出现问题。我正在使用Express并尝试传递一系列位置以在地图上制作标记。当我在视图中将变量集传递给脚本的位置时,它会破坏initMap函数并且我得到错误:initMap不是函数,调用使用initMap作为其回调的延迟脚本。但是,如果我删除了位置变量,则地图正确加载而没有任何标记。这是我的代码:

<script>
        window.initMap = function() {
        var userLocation = {lat: 40.7410986, lng: -73.9888682};
        var map = new google.maps.Map(document.getElementById('map'), {
          zoom: 16,
          center: userLocation
        });
          var locations = <%=JSON.stringify(locations)%>
          console.log(locations)

          var infowindow = new google.maps.InfoWindow();
          for(let i = 0; i < locations.length; i++) {
            var marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
        });
          google.maps.event.addListener(marker, 'click', (function(marker, i) {
          return function() {
            infowindow.setContent(locations[i][0]);
            infowindow.open(map, marker);
          }
        })(marker, i));
        }
      }
    </script>

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的代码可能会产生JS错误(所以它总是值得检查您的浏览器的JS控制台)。

使用<%= ... %>生成unescaped output,而不是使用<%- ... %>(执行HTML / XML类型转义):

var locations = <%- JSON.stringify(locations) %>