Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何加载谷歌地图作为回调?_Javascript_Google Maps - Fatal编程技术网

Javascript 如何加载谷歌地图作为回调?

Javascript 如何加载谷歌地图作为回调?,javascript,google-maps,Javascript,Google Maps,我定义了一个ajax函数,可以从数据库中获取一些记录,在获取数据后,我希望加载google maps,因此我将该函数作为回调传递: get_records = function (callback) { var postUrl = "someurl"; var postData = { csrfToken: "token", }; $.post(postUrl, postData, function (response) {

我定义了一个ajax函数,可以从数据库中获取一些记录,在获取数据后,我希望加载google maps,因此我将该函数作为回调传递:

get_records = function (callback) {
    var postUrl = "someurl";
    var postData =
    {
        csrfToken: "token",
    };

    $.post(postUrl, postData, function (response) {
        callback(response);
    });
};
get_records(function(result){
    init_map();
});
这是回调:

get_records = function (callback) {
    var postUrl = "someurl";
    var postData =
    {
        csrfToken: "token",
    };

    $.post(postUrl, postData, function (response) {
        callback(response);
    });
};
get_records(function(result){
    init_map();
});
其中init_映射为:

init_map = function () {

    var map;

    google.maps.event.addDomListener(window, "load", function () {

        map = new google.maps.Map(document.getElementById("map"), {
            center: new google.maps.LatLng(33.808678, -117.918921),
            zoom: 12,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        });

        var infoWindow = new google.maps.InfoWindow();

        function createMarker(options, html) {
            var marker = new google.maps.Marker(options);
            if (html) {
                google.maps.event.addListener(marker, "click", function () {
                    infoWindow.setContent(html);
                    infoWindow.open(options.map, this);
                });
            }
            return marker;
        }

        var marker0 = createMarker({
            position: new google.maps.LatLng(40.9117877, 14.7679659),
            map: map,
            icon: "../assets/img/marker-green.png"
        }, "<h1 class='black-content'>Marker 0</h1><p>This is the home marker.</p>");
    });

    return map;
};
init_map=函数(){
var映射;
google.maps.event.addDomListener(窗口,“加载”,函数(){
map=new google.maps.map(document.getElementById(“map”){
中心:新google.maps.LatLng(33.808678,-117.918921),
缩放:12,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
var infoWindow=new google.maps.infoWindow();
函数createMarker(选项,html){
var marker=新的google.maps.marker(选项);
如果(html){
google.maps.event.addListener(标记“单击”,函数(){
setContent(html);
infoWindow.open(options.map,this);
});
}
返回标记;
}
var marker0=createMarker({
位置:新google.maps.LatLng(40.9117877,14.7679659),
地图:地图,
图标:“../assets/img/marker green.png”
},“标记0这是主标记。

”; }); 返回图; };

如果我将init_map函数放在get_records之外,则会显示映射,但是上面的代码没有显示映射,这是为什么?

如果没有来自ajax帖子的响应,则永远不会调用回调

更好的方法是使用Promise接口:

var jqxhr=$.post(“example.php”,function()){
console.log(“成功”)
}).done(函数(){
//在完成时调用init_map()?
}).fail(函数(){
//在出现错误时调用init_map()?
}).always(函数(){
//调用init_map()而不考虑响应?
})

另外,您正在使用
google.maps.event.adddomstener
在窗口加载期间添加侦听器。如果您确定在发布ajax帖子之前已加载页面,则不需要此侦听器。您只需要在
init\u map
函数中创建一个新映射。

如果没有来自ajax post的响应,将永远不会调用回调

更好的方法是使用Promise接口:

var jqxhr=$.post(“example.php”,function()){
console.log(“成功”)
}).done(函数(){
//在完成时调用init_map()?
}).fail(函数(){
//在出现错误时调用init_map()?
}).always(函数(){
//调用init_map()而不考虑响应?
})
另外,您正在使用
google.maps.event.adddomstener
在窗口加载期间添加侦听器。如果您确定在发布ajax帖子之前已加载页面,则不需要此侦听器。您只需要在
init\u map
函数中创建一个新映射