javascript - Google map 地理编码回调参数错误

标签 javascript google-maps

我读了、读了、读了更多,结果我得出了以下结论:

// Place Markers on the Map
var PlaceMarkers = function (iw, adds, gc) {
    var image = {url: "http://mywebstte.com/Images/star2.png", size: new google.maps.Size(24, 24)};
    var aCt = adds.length;
    for(var i = 0; i < aCt; ++i) {
        GetLatLng(gc, adds[i].address, function(pos){
            if(pos){
                var ipop = '<h1>' + adds[i].title + '</h1>';
                if(!isBlank(adds[i].url)){
                    ipop += '<a href="' + adds[i].url + '" target="_blank">' + adds[i].url + '</a><br />';
                }
                ipop += '<div class="map_item_content" id="mi_content' + i + '">' + adds[i].content + '</div>';
                if(!isBlank(adds[i].mainphone)){
                    ipop += '<br /><strong>Phone:</strong> <a href="tel:'+adds[i].mainphone+'">' + adds[i].mainphone + '</a>';
                }
                if(!isBlank(adds[i].mainemail)){
                    ipop += '<br /><strong>Email:</strong> <a href="mailto:'+adds[i].mainemail+'">' + adds[i].mainemail + '</a>';
                }
                console.log('HEY NOW: ' + pos.toString() + ' - Location Found!'); // Never displays, as a result neither do the markers
                var mark = new google.maps.Marker({title: adds[i].title, position: pos, map: map, icon: image, html: ipop});            
                google.maps.event.addListener(mark, 'click', function(){
                    iw.setContent(this.html);
                    iw.open(map, this);
                });
            }
        });
    }
};
// Get Lat/Lng Location
var GetLatLng = function(gc, add, callback) {
    var ret = '';
    gc.geocode({'address': add}, function(res, status) {
        if (status == 'OK') {
            ret = res[0].geometry.location;
            console.log('Found Here: ' + ret.toString()); // Always displays
        } else {
            ret = null;
            console.log('Nothing Found For: ' + add);
        }
    });
    callback(ret);
};

现在,在 GetLatLng 中,我的控制台将显示找到的所传递地址的纬度/经度。我读到我需要回调,因为这些调用是异步的,但是,即使在使用回调之后 PlaceMarkers 仍然是空白,并且不会放置标记。

编辑获取LatLng

// Get Lat/Lng Location
var GetLatLng = function(gc, add, f) {
var ret = '';
gc.geocode({'address': add}, function(res, status) {
    if (status == 'OK') {
        f(res[0].geometry.location);
        console.log('Found Here: ' + ret.toString()); // Always displays
    }
});
return -1;
};

现在返回,但收到错误 TypeError:adds[i] is undefined

最佳答案

您需要在地理编码器回调中使用可用的数据:

// Get Lat/Lng Location
var GetLatLng = function(gc, add, callback) {
    var ret = '';
    gc.geocode({'address': add}, function(res, status) {
        if (status == 'OK') {
            ret = res[0].geometry.location;
            console.log('Found Here: ' + ret.toString()); // Always displays
        } else {
            ret = null;
            console.log('Nothing Found For: ' + add);
        }
        callback(ret);
    }  /* end of geocoder callback function */ );
};

关于javascript - Google map 地理编码回调参数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32889733/

相关文章:

facebook - 即使在添加 FacebookSDK 之后,解析也会出现 Mach-O 错误

javascript - jQuery 检查一个元素是否正确 "dropped"

javascript - Protractor 3.0.0 和 Cucumber 自动化测试

javascript - 如何以数组形式取回 LocalStorage HTML 5 中存储的数据?

javascript - 更改 google-maps-react 上选定多边形的颜色

java - 我怎样才能专注于谷歌地图的某个部分

javascript - google.maps.event.trigger(map, "resize") 问题

javascript - 在按钮上关闭响应响应左栏单击 jquery C#

javascript - 从 Javascript 隐藏代码中的 Fire 事件

javascript - 理解异步 JavaScript(谷歌地图)