2013-04-13 117 views
0

谷歌服务,我有一个数组异步调用使用JavaScript

SchoolAddress[0] = Abelsvej 98, 4100, Ringsted; 
SchoolAddress[1] = Prstevej 19, 4100, Ringsted; 
SchoolAddress[2] = Haraldsvej 77, 4100, Ringsted; 

我得纬度经度&此地址。

我为此使用了Google地理编码器。

for (var i = 0; i < schools.length; i++) 
{ 
    var address = schools[i][1]; 
    var geocoder = new google.maps.Geocoder(); 
    geocoder.geocode({ 'address': address }, function (results, status) 
    { 
     var location = results[0].geometry.location; 
     schoolslat[i] = location.lat() + ', ' + location.lng(); 
    }); 
} 

这里发生的事情是因为通话需要一些时间,来自通话的值不会去正确的schoolslat [i]。

回答

3

您可以使用您的要求closure冻结变量i

for (var i = 0; i < schools.length; i++) 
{ 
    (function(i){ 
     var address = schools[i]; 
     var geocoder = new google.maps.Geocoder(); 
     geocoder.geocode({ 'address': address }, function (results, status) 
     { 
      var location = results[0].geometry.location; 
      schoolslat[i] = location.lat() + ', ' + location.lng(); 
     }); 
    }(i)); 
} 

UPD

JSFiddle example

+0

它不工作,仍然发生同样的事 –

+0

你可以提供'学校'的数组内容? – fedosov

+0

请检查出更新中的JSFiddle示例。 – fedosov