在匿名函数中加载谷歌地图

mal*_*nso 4 javascript anonymous-function google-maps-api-3

我试图在匿名函数中加载谷歌地图,但每当我尝试使用其中一种api的方法时,我都会收到javascript错误.例如:

var mapOptions = {
      zoom: 8,
      center: new google.maps.LatLng(-34.397, 150.644),
      mapTypeId: google.maps.MapTypeId.ROADMAP
};
Run Code Online (Sandbox Code Playgroud)

错误

TypeError: google.maps.LatLng is not a constructor
Run Code Online (Sandbox Code Playgroud)

我创建了两个例子:

1)这通过页面正文中的脚本标记加载谷歌地图js.这种方法有效,没有js错误. http://jsfiddle.net/malonso/hgPQk/1/

2)这将在匿名函数中加载google map js w /.此方法不起作用,并包含上面提到的js错误.http://jsfiddle.net/malonso/fZqqW/2/

我确信我错过了一些明显的东西,但我根本无法弄清楚是什么.提前致谢.

更新:我应该指出,要求在匿名函数中加载谷歌地图.

Arm*_*ier 9

你可以这样做.您可以在网址中添加回调函数名称.它会在API加载时调用.必须可以在文档的范围内访问该回调函数.

我之前通过使用jQuery在窗口上触发自定义事件来做到这一点:http://jsfiddle.net/fZqqW/5/

使用" http://maps.google.com/maps/api/js?sensor=false&callback=gMapsCallback "

window.gMapsCallback = function(){
    $(window).trigger('gMapsLoaded');
}

$(document).ready((function(){
    function initialize(){
        var mapOptions = {
            zoom: 8,
            center: new google.maps.LatLng(-34.397, 150.644),
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById('map_canvas'),mapOptions);
    }
    function loadGoogleMaps(){
        var script_tag = document.createElement('script');
        script_tag.setAttribute("type","text/javascript");
        script_tag.setAttribute("src","http://maps.google.com/maps/api/js?sensor=false&callback=gMapsCallback");
        (document.getElementsByTagName("head")[0] || document.documentElement).appendChild(script_tag);
    }
    $(window).bind('gMapsLoaded', initialize);
    loadGoogleMaps();
})());?
Run Code Online (Sandbox Code Playgroud)

异步加载API

您可能希望在页面加载完成后或按需加载Maps API JavaScript代码.为此,您可以注入自己的标记以响应window.onload事件或函数调用,但是您需要另外指示Maps JavaScript API引导程序延迟应用程序代码的执行,直到Maps JavaScript API代码完全加载为止.您可以使用callback参数执行此操作,该参数将完成加载API时执行的函数作为参数.

以下代码指示应用程序在页面完全加载(使用window.onload)后加载Maps API,并将Maps JavaScript API写入页面中的标记.另外,我们通过将callback = initialize传递给Maps来指示API仅在API完全加载后执行initialize()函数

请参阅此处:https://developers.google.com/maps/documentation/javascript/tutorial