首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌地图应用编程接口V3 - ReferenceError:未定义谷歌

谷歌地图应用编程接口V3 - ReferenceError:未定义谷歌
EN

Stack Overflow用户
提问于 2013-07-05 06:33:10
回答 2查看 10.6K关注 0票数 5

我正在学习如何通过学习google的基本示例来创建谷歌地图。

我基本上复制并粘贴了head标签中的脚本,firebug控制台返回以下错误:

代码语言:javascript
复制
ReferenceError: google is not defined

我有以下几个脚本加载在头部与谷歌地图脚本。不知道为什么会抛出这个错误。

代码语言:javascript
复制
<head>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

    <!-- nmr is used to write my own scripts -->
    <script>var nmr = jQuery.noConflict();</script>

    <!-- Google Map scripts -->
    <script>
        function initialize() {
            var mapOptions = {
                zoom: 13,
                center: new google.maps.LatLng(-34.397, 150.644),
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };

            var map = new google.maps.Map(document.getElementById('map-canvas'),
            mapOptions);
        };

        function loadScript() {
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB7CgOuhFLDkh2VAGW1S2Y" + "sensor=false" + "callback=initialize";
            document.body.appendChild(script);
        }

        window.onload = loadScript;

    </script>

我也试着在初始化函数之前添加这个,但它不起作用。

代码语言:javascript
复制
<script> var google = jQuery.noConflict(); </script>

有人能帮上忙吗?谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-07-05 06:40:45

您的来源是错误的,我还建议指定您想要加载的确切版本:

代码语言:javascript
复制
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?v=3&sensor=false"></script>
票数 2
EN

Stack Overflow用户

发布于 2014-07-12 14:32:11

让我们看看代码中发生了什么。

1)让我们忽略ajax.googleapis.com,因为它无论如何都不会在发布的代码中使用。

代码语言:javascript
复制
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>

2)抛出错误的google对象是由Google Maps3API本身定义的,与jQuery无关,而且v3接口不使用任何jQuery,因此需要删除下面这行代码,因为它与我们面前的问题没有任何关系。

代码语言:javascript
复制
<script> var google = jQuery.noConflict(); </script> 

3)现在,当浏览器访问页面时,从javascript调用的第一件事是

代码语言:javascript
复制
window.onload = loadScript;

4)那么上面这行到底是什么意思呢?在加载了所有外部文件(包括图像、样式、脚本和其他依赖资源)之后,以及在DOM加载、呈现并准备就绪很长一段时间后,windows.onload才会启动。

这就是我们要讨论的问题。在windows.onload调用loadScript函数之后,该函数将

代码语言:javascript
复制
 script.src = "https://maps.googleapis.com/maps/api/js?key=AIzaSyB7CgOuhFLDkh2VAGW1S2Y" + "sensor=false" + "callback=initialize";

(顺便说一句,您的查询字符串缺少查询变量之间的所有"& .../js?v=3&key=xyz&sensor=false&callback=initialize <-格式正确

5)期待已久的Google API。不是的。它只附加API的加载器,尽管url本身中具有单词api。打开并查看上面的文件,您将看到一个document.write和一个由API的各个部分组成的块,这些块将根据调用加载器时使用的查询字符串参数来有条件地加载。

6)那么这一切意味着什么呢?您正在调用initialize函数,以为您将获得Google API,但实际上您得到的是Google API Loader,其中包含API,而API又包含google对象的定义。因此,回调是在附加Maps API之前触发的,因此在初始化()回调函数被触发时,google是未定义的。

解决方案

看看这里的doktormolle解决方案,它使用了一种不同的方法加载初始函数--> http://jsfiddle.net/doktormolle/7cu2F/

这里提供了一个解决方案,它绕过了中间人--> http://jsfiddle.net/doktormolle/zJ5em/,直接将google地图加载器添加到您的页面

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17478856

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档