我正在尝试创建一个利用Google Javascript V3的地理编码功能并返回经度和纬度数组的函数。由于某种原因,未使用该函数填充返回数组。谢谢你的帮助!
代码:
function getCoords(address) {
var latLng = [];
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latLng.push(results[0].geometry.location.lat());
latLng.push(results[0].geometry.location.lng());
return latLng;
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
var test_arr;
test_arr = getLatLng('New York');
alert(test_arr[0] + ',' + test_arr[1]) // I'm getting a test_arr is undefined here.
答案 0 :(得分:0)
@Matt Ball应该已经发布了答案。 :) test_arr未定义的原因是因为您在结果返回之前立即对其进行评估。
如果您执行了setTimeout(您不应该这样做),您会注意到数组最终会有一些内容。
setTimeout(function(){
alert(test_arr) // has stuff...
}, 5000);
相反,您可以将匿名函数传递给getCoords作为回调。一旦坐标可用,就会执行此功能。
function getCoords(address, callback) {
...
var lng = results[0].geometry.location.lng();
var lat = results[0].geometry.location.lat();
callback([lat, lng]);
...
}
getCoords("New York", function(coords) {
alert(coords); // works
});
答案 1 :(得分:0)
在Javascript中阅读使用回调函数。 This article可能会有所帮助。
Jon指出,您可以通过将回调函数传递到getCoords方法来解决此问题。这是一种等待谷歌回复的方式。您可以定义在完成地理编码时将调用的函数。您将使用数据作为参数调用提供的函数,而不是返回数据。
这样的事情:
function getCoords(address, callback) {
var latLng = [];
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
latLng.push(results[0].geometry.location.lat());
latLng.push(results[0].geometry.location.lng());
callback(latLng);
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
getCoords('New York', function(latLng) {
var test_arr;
test_arr = latLng;
alert(test_arr[0] + ',' + test_arr[1])
// Continue the rest of your program's execution in here
});