我正在使用Google Maps API。我不知道为什么在index ++之后调用下面的函数。据我所知,应首先调用ReverseGeocode()。而不是它首先递增然后调用为我创造问题的函数。警报框在写入时显示,但在函数的最后一行执行后调用中间函数,即(index ++)。
function placeMarker(location)
{
alert("iiii");
ReverseGeocode(location.lat(),location.lng());
alert("jjjk");
index++;
}
这是我的ReverseGeoCode
function ReverseGeocode(lat,lng) {
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
places[index]=results[0].formatted_address;
alert(places[index]+"index="+index);
AddRow('table',results[0].formatted_address);
document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
}
}
else
{
alert("Geocoder failed due to: " + status);
}
});
}
请解释一下。提前谢谢。
答案 0 :(得分:1)
警报在你的回调函数中,该函数将在geocoder.geocode
完成计算时执行。
geocoder.geocode
似乎是异步的。通常,这意味着geocoder.geocode
会在其他地方开始与其工作一起开始,而您的计划将继续在本地结束。当geocoder.geocode
稍后完成时,它将执行您提供的回调函数。
答案 1 :(得分:0)
我认为geocoder.geocode
是异步的。当index
的值增加时,它将在稍后的某个时间执行您的匿名函数。
function placeMarker(location)
{
alert("iiii")
ReverseGeocode(location.lat(),location.lng(),index);
alert("jjjk");
index++;
}
function ReverseGeocode(lat,lng,index) {
var latlng = new google.maps.LatLng(lat, lng);
geocoder.geocode({'latLng': latlng}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
if (results[1])
{
places[index]=results[0].formatted_address;
alert(places[index]+"index="+index);
AddRow('table',results[0].formatted_address);
document.getElementById("dataa").innerHTML+=results[0].formatted_address+"<br/>";
}
}
else
{
alert("Geocoder failed due to: " + status);
}
});
}
在这种情况下,index
进入匿名函数的本地范围,因此不会被覆盖。