我正在开发一个脚本,以便通过地址从谷歌地图获取latlng。
如果我在函数alert(jsonarr.lat);
中放置map_address()
,我会得到正确的值,但是如果我将结果赋给这样的变量:
var coord = map_address('address');
alert(coord.lat);
我收到错误coord is undefined
function map_address(addr)
{
var input_address = addr;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { address: input_address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
jsonarr={'lat':lat,'lng':lng}
alert(jsonarr.lat);
return jsonarr;
} else {
alert("Nessuna coordinata trovata da questo indirizzo!");
}
});
}
答案 0 :(得分:1)
geocoder.geocode(..);
函数是异步的,因为它包含了另一个函数,稍后在地理编码操作完成时会调用它。
因此map_address(...)
将始终返回undefined
答案 1 :(得分:1)
试试这样:
function map_address(addr, callback) {
var input_address = addr;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { address: input_address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
jsonarr={'lat':lat,'lng':lng}
alert(jsonarr.lat);
callback(jsonarr) ;
}
else {
alert("Nessuna coordinata trovata da questo indirizzo!");
}
});
}
map_address("hogehoge", function(result){
alert(result)
});
答案 2 :(得分:0)
感谢大家的回答,我把所有代码放在回调中,一切正常,这是最终的代码。
function map_address(addr,callback)
{
var input_address = addr;
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { address: input_address }, function(results, status) {
if (status == google.maps.GeocoderStatus.OK)
{
var lat = results[0].geometry.location.lat();
var lng = results[0].geometry.location.lng();
jsonarr={'lat':lat,'lng':lng}
return callback(jsonarr);
}
else {
alert("No coord find");
}
});
}
$(document).ready(function(){
$(window).load(function(){
map_address('address string',function(coord){
var center=new google.maps.LatLng(coord.lat,coord.lng);
var settings = {
zoom: 16,
center: center,
mapTypeControl: false,
mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
navigationControl: true,
navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map=new google.maps.Map(document.getElementById("map"), settings);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(coord.lat,coord.lng),
map: map
});
});
});
});