【问题标题】:initMap is not a function (ASP/NET)initMap 不是函数 (ASP/NET)
【发布时间】:2018-04-21 00:31:03
【问题描述】:

我有 js 脚本文件。我在哪里使用谷歌热图

这是js文件的代码

  $(document).ready(function () {
    //map initialization
    function initMap() {
        map = new google.maps.Map(document.getElementById('map'),
            {
                zoom: 5,
                center: { lat: 51.0742853, lng: 11.0294547 },
                mapTypeId: 'roadmap'
            });
        var centerControlDiv = document.createElement('div');
        var centerControlDiv2 = document.createElement('div');
        var centerControl = new CenterControl(centerControlDiv, map);
        var centerControl2 = new CenterControl1(centerControlDiv, map);

        centerControlDiv.index = 1;
        map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
        getDriving();
    }
    });  

在视图中我有脚本

script async defer
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCea6mL2cqwVid2ESIjuJ0C31RbNVQNPY0&libraries=visualization&callback=initMap">

当我运行项目时出现initMap is not a function 错误。我该如何解决它。

删除callback=initMap不解决问题

这是脚本的定义方式

  <script async defer
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCea6mL2cqwVid2ESIjuJ0C31RbNVQNPY0&libraries=visualization&callback=initMap">
</script>

<script src="~/Scripts/DataTables-1.10.2/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/a5734b29083/integration/bootstrap/3/dataTables.bootstrap.js"></script>
<link rel="stylesheet" href="https://cdn.datatables.net/plug-ins/a5734b29083/integration/bootstrap/3/dataTables.bootstrap.css" />
<script src="~/Scripts/jquery-ui.min.js"></script>
<script src="~/Scripts/Datepicker-Languages/datepicker-languages.js"></script>
<link href="~/Content/Styles/jquery-ui.css" rel="stylesheet" />
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.3/moment.min.js"></script>
<script src="~/Scripts/jQuery-ui-extensions/weekMonthDatepicker.js?v=1.0.0.0"></script>

<script src="~/Scripts/Reports/Heatmap.js"></script>

此行中的InitMap &lt;script src="~/Scripts/Reports/Heatmap.js"&gt;&lt;/script&gt;

【问题讨论】:

  • 您在尝试使用之前是否在您的视图中定义了initMap? Javascript 代码必须在对其进行任何引用之前。
  • 我更新了我的帖子@RobAnthony

标签: javascript asp.net google-maps


【解决方案1】:

删除异步,它告诉浏览器解析代码独立于正在加载的其余代码,只依赖延迟,它告诉浏览器等待文档加载,直到执行它。

  <script defer
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCea6mL2cqwVid2ESIjuJ0C31RbNVQNPY0&libraries=visualization&callback=initMap">

或将文件中脚本的顺序更改为:

<script src="~/Scripts/Reports/Heatmap.js"></script>
<script async
        src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCea6mL2cqwVid2ESIjuJ0C31RbNVQNPY0&libraries=visualization&callback=initMap">
</script>

您也不需要等待文档加载(并且不想)来定义您的函数,因此删除第一行和最后一行。

   //map initialization
    function initMap() {
        map = new google.maps.Map(document.getElementById('map'),
            {
                zoom: 5,
                center: { lat: 51.0742853, lng: 11.0294547 },
                mapTypeId: 'roadmap'
            });
        var centerControlDiv = document.createElement('div');
        var centerControlDiv2 = document.createElement('div');
        var centerControl = new CenterControl(centerControlDiv, map);
        var centerControl2 = new CenterControl1(centerControlDiv, map);

        centerControlDiv.index = 1;
        map.controls[google.maps.ControlPosition.TOP_CENTER].push(centerControlDiv);
        getDriving();
    }

【讨论】:

  • 如果您需要在执行一段代码之前加载整个 DOM,您只需要将 javascript 放入 $(document).ready(function() 中。因为您只是定义一个函数,所以您不需要这样做。当您以某种方式修改或读取 DOM 但您不在这里时,通常需要确保 DOM 已加载,因此您可以摆脱 $(document).ready..行
猜你喜欢
  • 1970-01-01
  • 2017-03-28
  • 1970-01-01
  • 2018-01-12
  • 1970-01-01
  • 2019-02-09
  • 1970-01-01
  • 2020-02-03
相关资源
最近更新 更多