尽管已经输入了API,但仍未定义Google

时间:2019-02-09 12:58:50

标签: jquery html google-maps

我不知道为什么一直说Google未定义。有人知道这个问题吗?

我已经尝试将脚本移到最前面,但这里仍然没有用。

   __kernel void vector_add(__global int *A, __global int *B, __global int *C)
    {
    int i = get_global_id(0);
    C[i] = A[i] + B[i];
    }

我希望它可以遍历本地存储中的内容

2 个答案:

答案 0 :(得分:0)

否。1)您的浏览器不知道google是什么,因为google变量将在以后的脚本中定义。将您的<script>initMap函数等放置在脚本<script async defer src="https://maps.googleapis.com/maps/api/js key=....&callback=initMap"> </script>的之后。

No.2)在页面完全加载后运行代码可能会有所帮助。您可以使用document.addEventListener('DOMContentLoaded', function() { //your code here })或使用类似jQuery的库。

P.S。一般而言,请谨慎使用API​​密钥。不要发布

答案 1 :(得分:0)

您正在异步加载Google Maps Javascript API(使用async defer)。该API在加载完成之前将不可用(google是未定义的)。届时它将运行您的回调函数(initMap)。

API文档中的描述

loop内部移动initMap函数调用(或同步加载API)。

proof of concept fiddle

代码段:(由于沙箱操作,注释不会读取localStorage)

#map {
  height: 100%;
}

html,
body {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script>
  var map;

  function initMap() {
    map = new google.maps.Map(document.getElementById('map'), {
      zoom: 2,
      center: new google.maps.LatLng(2.8, -187.3),
      mapTypeId: 'terrain'
    });
    loop()
  }

  // Loop through the results array and place a marker for each
  // set of coordinates.
  function loop() {
    var lati = JSON.parse(localStorage.getItem("lat2"))
    console.log("Hi")
    console.log(lati)
    for (var i = 0; i < lati.length; i++) {
      var coords = lati[i]
      var latLng = {
        lat: (coords[0]),
        lng: (coords[1])
      };
      var marker = new google.maps.Marker({
        position: latLng,
        map: map
      });
    }
  }
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk&callback=initMap">
</script>