未捕获的类型错误:window.initMap 不是函数

Posted

技术标签:

【中文标题】未捕获的类型错误:window.initMap 不是函数【英文标题】:Uncaught TypeError: window.initMap is not a function 【发布时间】:2016-02-11 01:28:06 【问题描述】:

编辑:通过移动 <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBjEILUPsJO83wPyTKZlscBCMO-Aajy6Kw&signed_in=true&libraries=geometry, places&callback=initMap"></script> 在 js 脚本调用之后。然后通过尝试修复我之前的代码来修复我添加的错误。感谢您的帮助!

我一直在努力重新组织我的代码,以便项目更加健壮(与所有 javascript 嵌入到 html 文件中的方式相比),但是当将其移动到新的 javascript 文件并调用我收到的脚本时错误“未捕获的 TypeError:window.initMap 不是函数”。

如果有任何提示您可以向我提供/修复此错误,我们将不胜感激!

HTML 代码:

    <!DOCTYPE html>
% load staticfiles %

<html>
    <head>
        <title>% block title % RacksOnRacks% endblock %</title>
        <link rel="stylesheet" href="% static "css/racks.css" %"  />
        <script src="//code.jquery.com/jquery-1.11.2.min.js"></script> <!-- not sure what this is-->
        % block script_block %%  endblock %
    </head>

    <body>
        <div id="menu">
            <div id="logo"  onclick="location.href='/';" style="cursor:pointer;">
                <img id="logoimg" src="% static "images/temprackicon.png" %"/>
#                TODO make this match onclick initmap#
            </div>
            <div id="title" onclick="location.href='/';" style="cursor:pointer;">
                RACKS ON RACKS
            </div>
        </div>
        % block body_block %% endblock %
    </body>
</html>

其他 HTML 文件

    %  extends 'racks/baselayer.html' %
    %  load staticfiles %
    % block title % Racks On Racks: Find Nearby Places to Secure Your Bike! % endblock %


% block script_block %
    <link rel="stylesheet" href="% static "map/css/maps-admin.css" %" />
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBjEILUPsJO83wPyTKZlscBCMO-Aajy6Kw&signed_in=true&libraries=geometry, places&callback=initMap"></script>
    <script type="text/javascript" src="% static "map/javascript/googlemaps.js" %"></script>

%  endblock %

% block body_block %
    <select id="filters">
        <option value="100">100m</option>
        <option value="250">250m</option>
        <option value="500">500m</option>
        <option value="1000">1000m</option>
    </select>


    <div id="map_canvas"></div>
% endblock %

和 JS:

    function initMap()
    var myLatLngGlobal;
    var map;
    var filterDistance;

    var self = 
        // starts all the processes
        //function placeRackMarkers(locations, map) 
        initialize: function () 
            if (navigator.geolocation) 
                navigator.geolocation.getCurrentPosition(function (position) 
                    var myLatLng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
                    myLatLngGlobal = myLatLng;
                , function () 
                    handleLocationError(true, infoWindow, map.getCenter());
                );
             else 
                // Browser doesn't support Geolocation
                handleLocationError(false, infoWindow, map.getCenter());
            

            var zoom = 12;
            //var filterDistance = 1000;

            //var latlng = new google.maps.LatLng(lat, lng);
            //myLatLngGlobal = latlng;
            var options = 
                zoom: zoom,
                center: myLatLngGlobal,
                //mapTypeId:
            ;
            map = new google.maps.Map(document.getElementById("map_canvas"), options);
            var marker = new google.maps.Marker(
                position: myLatLngGlobal,
                map: map,
                title: 'Hello World!',
                draggable: false,
                animation: google.maps.Animation.DROP

            );
            self.attachHandlers();
            self.displayRacks();
            //add all the intialiazing functions (self.(....)
        ,

        //Event handlers attached
        attachHandlers: function () 
            $("#filterDistance").click(function () 
                filterDistance = "#filterDistance";
            );
            //console.log("filterDistance = " + self.filterDistance);
        ,

        /*
         var filterDistance1 = document.getElementById("filters").value; //put outside of self var if this doesnt work
         console.log("filterDistance =" + filterDistance1);

         filterDistance = filterDistance1;
         */



        displayRacks: function () 
            var locations;
            $.get('/racks/map_locations/', , function (data) 
                locations = data['racks'];

                filterPlaceRacks(locations, myLatLngGlobal, map);
            );
        
    ;


    function placeRackMarkers(locations, map) 

        var marker, i;

        for (i = 0; i < locations.length; i++) 
            marker = new google.maps.Marker(
                position: new google.maps.LatLng(locations[i][1], locations[i][2]),
                map: map
            );
        
    

    function filterPlaceRacks(racks, map) 
        var filteredRacks = [];
        for (var i = 0; i < racks.length; i++) 
            if (checkDistance(racks[i]) <= self.filterDistance) 

                filteredRacks.push(racks[i]);
                console.log(filteredRacks);
            
        
        placeRackMarkers(filteredRacks, map);
    


    function checkDistance(rack) 
        var rackLatLng = new google.maps.LatLng(rack[1], rack[2]);
        return (google.maps.geometry.spherical.computeDistanceBetween(rackLatLng, myLatLngGlobal));
    

    return self;


    $(document).ready(function () 
        var googleMap = initMap();
        googleMap.initialize();
    );

再次感谢! PS。抱歉,代码结构不佳,仍在进行中。

同样使用 django 框架,以及带有 jquery 的 ajax

【问题讨论】:

可能重复(不同的错误但相同的解决方案):***.com/questions/32691295/… 【参考方案1】:

由于我的面包和黄油服务器端是 php,因此我在某个地方迷路了,但是如果这曾经可以工作,那么您可能弄乱了脚本应该加载的顺序(正在调用一个函数尚未加载)

尝试按照之前调用的顺序调用js的各个部分

您的 注释,这是一个用于 javascript (jQuery) 的库,您可能需要在页面上的所有其他脚本之前加载它。

P/S 很抱歉没有提供太多帮助,但我现在没有时间设置 django 来测试一下。

【讨论】:

以上是关于未捕获的类型错误:window.initMap 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

未捕获的类型错误未定义不是函数

未捕获的类型错误:无法读取未定义的属性“区域”?

未捕获的类型错误:数据表

未捕获的类型错误:无法读取未定义的属性“ajax”

React - 未捕获的类型错误:无法读取未定义的属性“func”

未捕获的类型错误:routes.forEach 不是函数