jQuery在加载Google地图之前执行:"map is undefined"

Key*_*ger 3 jquery google-maps

除了jQuery和Google Maps之外,我的页面头部还包含两个脚本:

<script src="js/map.js" type="text/javascript"></script>
<script src="js/site.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

map.js包含初始化我的地图的代码,并且还具有以下功能来在其上放置标记:

function placeMarker(marker){
    clearLocations();

    var latlng = new google.maps.LatLng(
        parseFloat(marker.lat),
        parseFloat(marker.lng)
    );

    var marker = createMarker(latlng);

    map.setZoom(14);
    var latLng = marker.getPosition();
    map.setCenter(latLng);          

}
Run Code Online (Sandbox Code Playgroud)

当我在site.js中调用placeMarker内部$(document).ready()时,我收到错误,"map is undefined".但是当我调用site.js中的另一个函数时,单击一个按钮时执行该函数,placeMarker在其回调中运行没有问题:

$.ajax({
    url: 'ajax/json.php',
    dataType: 'json',
    data: 'search_string='+inpMapSearch+'&country='+Country,
    success: function(data) {
        console.log(data);
        placeMarker(data);
    }
});
Run Code Online (Sandbox Code Playgroud)

这是否意味着placeMarker内部函数调用在$(document).ready()初始化映射之前尝试执行?placeMarker初始化地图后如何运行?

===编辑===

根据请求,这里是初始化地图的代码:

google.maps.event.addDomListener(window, 'load', load);

function load() {
    map = new google.maps.Map(document.getElementById("map"), {
        center: new google.maps.LatLng(18.735693,-70.162651),
        zoom: 8,
        mapTypeId: 'roadmap',
        mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU}
    });
}
Run Code Online (Sandbox Code Playgroud)

azi*_*ani 5

因为窗口加载事件触发document.ready.因此,您的地图在document.ready之后初始化.您可以将其他代码包装在$(window).load中

$(window).load(function(){
    your code here 
});
Run Code Online (Sandbox Code Playgroud)