Javascript 为什么我的地理代码不能显示地址
我想显示来自英国用户输入的格式化地址。但我不明白为什么第二个警报没有定义?我不是在第一行定义了变量“fmtAdd”吗?您的“第二个”警报实际上是您的第一个警报,因为它是首先执行的(Javascript 为什么我的地理代码不能显示地址,javascript,google-maps-api-3,geocode,street-address,postal-code,Javascript,Google Maps Api 3,Geocode,Street Address,Postal Code,我想显示来自英国用户输入的格式化地址。但我不明白为什么第二个警报没有定义?我不是在第一行定义了变量“fmtAdd”吗?您的“第二个”警报实际上是您的第一个警报,因为它是首先执行的(geocode()是非阻塞的-它会立即返回)。 此时,您“定义”了fmtAdd,但没有对其进行初始化 var geocoder, map, point, fmtAdd, marker; function mapLoad() { geocoder = new google.maps.Geocoder(); var my
geocode()
是非阻塞的-它会立即返回)。此时,您“定义”了fmtAdd,但没有对其进行初始化
var geocoder, map, point, fmtAdd, marker;
function mapLoad() {
geocoder = new google.maps.Geocoder();
var myOptions = {
zoom: 15,
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
address="W3 6BY";
if(address){geocoder.geocode({'address':address}, geocodeResult);}
else{alert("Postcode Incorrect");window.close();}
}
function geocodeResult(results, status) {
if (status == 'OK' && results.length > 0) {
point=results[0].geometry.location;
map.setCenter(point);
marker = new google.maps.Marker({map: map, position: point, draggable: true});
geocoder.geocode({latLng:point},function(results, status){
if(status == 'OK') {
if(results.length == 0) {
fmtAdd = 'None';
} else {
fmtAdd = results[0].formatted_address;
}
} else {
fmtAdd = 'Error';
}
alert(fmtAdd); // shows the address
});
alert(fmtAdd); // says undefined;
} else {
alert("Error: " + status);
}
}
mapLoad();
警报未定义
答复意见: 我认为这是一个全局变量,一旦地理代码给出 一个值,我甚至可以从地理代码中检索该值 功能 这是正确的。一旦传递给
geocode()
的回调函数设置了一个值,该变量就会初始化。而事实就是这样在该“事件”之后,您可以在函数之外从全局变量中检索值
这里的问题是,您试图在回调函数完成(甚至被调用)之前从fmtAddr
检索值。这是因为
geocode()
是非阻塞的。这意味着它会立即返回,这就是为什么要将回调函数传递给geocode()
发生了什么
关于本部分代码:
var foo; alert(foo);
按时间顺序:
geocode()
,并向其传递回调geocode()
启动对google服务器的异步请求并立即返回警报(fmtAdd);//表示未定义代码>
fmtAddr
- 创建一个函数,该函数可以对格式化地址执行任何操作李>
- 从回调函数调用此函数。也就是说,在设置
fmtAdd
geocode()
是非阻塞的-它会立即返回)。此时,您“定义”了fmtAdd,但没有对其进行初始化
var geocoder, map, point, fmtAdd, marker;
function mapLoad() {
geocoder = new google.maps.Geocoder();
var myOptions = {
zoom: 15,
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
address="W3 6BY";
if(address){geocoder.geocode({'address':address}, geocodeResult);}
else{alert("Postcode Incorrect");window.close();}
}
function geocodeResult(results, status) {
if (status == 'OK' && results.length > 0) {
point=results[0].geometry.location;
map.setCenter(point);
marker = new google.maps.Marker({map: map, position: point, draggable: true});
geocoder.geocode({latLng:point},function(results, status){
if(status == 'OK') {
if(results.length == 0) {
fmtAdd = 'None';
} else {
fmtAdd = results[0].formatted_address;
}
} else {
fmtAdd = 'Error';
}
alert(fmtAdd); // shows the address
});
alert(fmtAdd); // says undefined;
} else {
alert("Error: " + status);
}
}
mapLoad();
警报未定义
答复意见: 我认为这是一个全局变量,一旦地理代码给出 一个值,我甚至可以从地理代码中检索该值 功能 这是正确的。一旦传递给
geocode()
的回调函数设置了一个值,该变量就会初始化。而事实就是这样在该“事件”之后,您可以在函数之外从全局变量中检索值
这里的问题是,您试图在回调函数完成(甚至被调用)之前从fmtAddr
检索值。这是因为
geocode()
是非阻塞的。这意味着它会立即返回,这就是为什么要将回调函数传递给geocode()
发生了什么
关于本部分代码:
var foo; alert(foo);
按时间顺序:
geocode()
,并向其传递回调geocode()
启动对google服务器的异步请求并立即返回警报(fmtAdd);//表示未定义代码>
fmtAddr
- 创建一个函数,该函数可以对格式化地址执行任何操作李>
- 从回调函数调用此函数。也就是说,在设置
fmtAdd
(实际上最好是将格式化地址作为参数直接传递给此函数,而不使用全局变量)您应该使用您正在使用的编程语言和google maps api标记来标记您的问题。您应该使用您正在使用的编程语言和google maps api标记来标记您的问题。谢谢。但是我仍然不明白为什么地址没有保存在变量fmtAdd中,我认为它是一个全局变量,一旦地理代码给它赋值,我甚至可以从地理代码函数中检索该值。谢谢。但我仍然不明白为什么地址没有保存在变量fmtAdd中,我认为它是一个全局变量,一旦地理编码给它一个值,我甚至可以从地理编码函数中检索该值。