为什么这不是google.maps.Map地图的实例?InvalidValueError:setMap:不是Map的实例;

adi*_*din 8 javascript google-maps object google-maps-api-3

Assertion failed: InvalidValueError: setMap: not an instance of Map; and not an instance of StreetViewPanorama在谷歌地图网页上收到错误.然后我在Stack Overflow上的其他地方读到这个问题,告诉我我需要一个google.maps.MAP对象的实例.我认为通过调用该对象来初始化我将调用该对象的地图.

以前,我收到错误,i is not defined所以我将createMarker函数移动到$.getJSON具有局部范围的函数中.

我需要在google.mapsMap其他地方打电话吗?

我究竟做错了什么?

HTML:

<body>
    <h1 style="text-align: center;">Hello World</h1>
    <div id="map"></div>
    <ul id="list"></ul>

</body>
Run Code Online (Sandbox Code Playgroud)

CSS:

#map {
    height: 300px;
    width: 600px;
    border: 1px solid black;
    margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)

JavaScript的:

function initialize(){
    var mapProp = {
        center: new google.maps.LatLng(38, -78),
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById('map'), mapProp);
};

$(document).ready(function(){
    var url = 'https://opendata.howardcountymd.gov/resource/96q9-qbh7.json';
    initialize();
    $.getJSON(url, function (data){
        $.each(data, function(i, field) {
            $('#list').append("<li>" + data[i].location.longitude + " & " + data[i].location.latitude + "</li>");
            createMarker(data);

            function createMarker (data) {
                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(data[i].location.latitude, data[i].location.longitude),
                    map: map,
                    title: field.crossroad
                });
            };
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

geo*_*zip 17

作为a实例的map变量是函数的google.maps.Map本地initialize变量.createMarker函数中的map变量未定义.一种选择:在全局范围内定义变量:

var map;
Run Code Online (Sandbox Code Playgroud)

然后在initialize函数中初始化它:

function initialize(){
    var mapProp = {
        center: new google.maps.LatLng(38, -78),
        zoom: 10,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map'), mapProp);
};
Run Code Online (Sandbox Code Playgroud)

概念证明小提琴

代码段:

var map;

function initialize() {
  var mapProp = {
    center: new google.maps.LatLng(38, -78),
    zoom: 6,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };
  map = new google.maps.Map(document.getElementById('map'), mapProp);
};

$(document).ready(function() {
  var url = 'https://opendata.howardcountymd.gov/resource/96q9-qbh7.json';
  initialize();
  $.getJSON(url, function(data) {
    $.each(data, function(i, field) {
      $('#list').append("<li>" + data[i].location.longitude + " & " + data[i].location.latitude + "</li>");
      createMarker(data);

      function createMarker(data) {
        var marker = new google.maps.Marker({
          position: new google.maps.LatLng(data[i].location.latitude, data[i].location.longitude),
          map: map,
          title: field.crossroad
        });
      };
    });
  });

});
Run Code Online (Sandbox Code Playgroud)
#map {
  height: 300px;
  width: 600px;
  border: 1px solid black;
  margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
<h1 style="text-align: center;">Hello World</h1>

<div id="map"></div>
<ul id="list"></ul>
Run Code Online (Sandbox Code Playgroud)

另一种选择是map从初始化函数返回