initMap不是Google Maps Javascript的功能

EB.*_*EB. 2 html javascript jquery google-maps

我知道这个问题已经被问到了.但我仍然无法超越它.我只是想在js小提琴中加载googlemaps API.我无法解决错误:initMap不是一个函数.我的jsfiddle在这里:jsfiddle

我的代码:

function initMap() {
    var map = new google.maps.Map(document.getElementById('map'), {
        center: { lat: 34.397, lng: 150.644 },
        scrollwheel: false,
        zoom: 2
    });
Run Code Online (Sandbox Code Playgroud)

HTML:

  <div id="map" style="width: 500px; height: 400px;"></div>
      <script async defer
            src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDieZ7uAY4DPdT3Z4fp4KtykHl6dWryYdw&callback=initMap">
    </script>
Run Code Online (Sandbox Code Playgroud)

当我有函数initmap(){}(带括号)时,地图不会加载,我得到错误.当删除function initmap{}和只是:

var map = new google.maps.Map(document.getElementById('map'), {
    center: { lat: 34.397, lng: 150.644 },
    scrollwheel: false,
    zoom: 2
});
Run Code Online (Sandbox Code Playgroud)

地图加载,但我仍然得到错误:

initMap不是一个函数

它可能与回调有关.我有一段时间没有写过javascript.但我只需要克服这个错误.谢谢

Ada*_*zad 9

TL; DR

在小提琴中,你没有关闭iniMap()with 的语法错误}.此外,该函数是在DOM加载后定义的.解决这个问题:

  • 设置加载类型以包装<body><head>
  • 修复语法错误

固定

这是如何处理这些.

全球范围

initMap在全球范围内.不要将函数定义包装在私有或匿名范围内

(function(){

function initMap(){
    //
}

})();
Run Code Online (Sandbox Code Playgroud)

DOM onload

<head>如果可能,定义功能.或者至少在加载API之前<body>.而且从来没有定义initMap后的DOM完全加载速度快如window.onloaddocument.addEventListener('ondomready', callback)

好的做法

<script>
function initMap(){
  //
}
</script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
Run Code Online (Sandbox Code Playgroud)

糟糕的做法:

window.onload

<script>
window.onload = function(){
  function initMap(){
     //
  }
}
</script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
Run Code Online (Sandbox Code Playgroud)

<script>
document.addEventListener('ondomready', function(){
  function initMap(){
     //
  }
});
</script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
Run Code Online (Sandbox Code Playgroud)

或者$(function(){ })如果你使用的是jQuery

<script>
$(function(){
  function initMap(){
     //
  }
});
</script>
<script src="https://maps.googleapis.com/maps/api/js"></script>
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 6

这是一个如何运作的JSFiddle.

基本上将您的函数置于调用之上 Google API

<script>
function initMap() {
        var map = new google.maps.Map(document.getElementById('map'), {
            center: { lat: 34.397, lng: 150.644 },
            scrollwheel: false,
            zoom: 2
        });
    } // close function here
    </script>
    <script async defer
                src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDieZ7uAY4DPdT3Z4fp4KtykHl6dWryYdw&callback=initMap">
        </script>
Run Code Online (Sandbox Code Playgroud)

此功能也未正确关闭.