javascript函数返回未定义的
我正在尝试实现谷歌地图,我遇到的问题是,当我调用函数getLatLng时,它返回一个未定义的值,我不知道为什么javascript函数返回未定义的,javascript,google-maps,Javascript,Google Maps,我正在尝试实现谷歌地图,我遇到的问题是,当我调用函数getLatLng时,它返回一个未定义的值,我不知道为什么 initialize(); var map; var geocoder; function initialize() { geocoder = new google.maps.Geocoder(); var address = "Rochester, MN"; var myLatLng = ge
initialize();
var map;
var geocoder;
function initialize() {
geocoder = new google.maps.Geocoder();
var address = "Rochester, MN";
var myLatLng = getLatLng(address);
console.log("myLatLng = "+myLatLng);
}
function getLatLng(address) {
var codedAddress;
geocoder.geocode({'address': address}, function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
codedAddress = results[0].geometry.location;
console.log("codedAddress 1 = "+codedAddress);
} else {
alert("There was a problem with the map");
}
console.log("codedAddress 2 = "+codedAddress);
});
console.log("codedAddress 3 = "+codedAddress);
return codedAddress;
}
在firebug控制台中,以下是我按照以下确切顺序获得的输出:
codedAddress 3 = undefined
myLatLng = undefined
codedAddress 1 = (44.0216306, -92.46989919999999)
codedAddress 2 = (44.0216306, -92.46989919999999)
为什么codedAddress 3和myLatLng会首先出现在控制台中?初始化函数缺少一个关闭的
。地理编码是异步的(即),因此您需要将回调函数传递给getLatLng
,而不是让它立即返回:
function getLatLng(address, callback) {
var codedAddress;
geocoder.geocode({'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
codedAddress = results[0].geometry.location;
console.log("codedAddress 1 = "+codedAddress);
} else {
alert("There was a problem with the map");
}
console.log("codedAddress 2 = "+codedAddress);
callback(codedAddress);
});
}
以下是我通过谷歌地图文档所做的工作:
var geocoder;
var map;
function initialize() {
geocoder = new google.maps.Geocoder();
var address = "Rochester, MN";
var latlng = codeAddress(address);
var myOptions = {
zoom: 8,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
}
function codeAddress(address) {
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
显然,如果需要,您可以更新它以使用jQuery。不,我实际上有一个结束括号,但我只是遗漏了一些其他内容,忘记了复制该括号。这可能是一个愚蠢的问题,但我已将回调添加到函数参数中,并在geocode语句的末尾,如您所示,但是现在当我这样调用getLatLng时:var myLatLng=getLatLng(地址,回调)代码>我在控制台中没有得到任何信息,也没有显示任何映射。您正在传递什么回调函数?它的形式必须是var mylatng=getLatLng(地址、函数(codedAddress){/*do something*/})代码>我不确定我是否理解。在“做点什么”这一段中需要做什么?我只想将getLatLng中的值赋给一个变量。@Catfish需要对codedAddress
执行的所有操作都属于回调(“做点什么”部分)。异步编程就是这样工作的。回调函数可能是正确的解决方案,但我没能弄明白。我使用了斯科特的解决方案,效果很好。