2011-04-07 180 views
3
var lat = 0.0; 
var lng = 0.0; 
var jsonData = null; 
var geocoder = new google.maps.Geocoder(); 
var miles = $('#milesAway').val(); 

// find what the user is locating by 
if ($('#zipCode').is(':visible')) 
{ 
    var zipText = $('#zipCode').val(); 
    if (isValidUSZip(zipText)) 
    { 
     geocoder.geocode({ 
      'address': zipText 
     }, function(results, status) { 
      if (status == google.maps.GeocoderStatus.OK) { 
       lat = results[0].geometry.location.lat(); 
       lng = results[0].geometry.location.lng(); 
       map.setCenter(results[0].geometry.location); 
      } else { 
       alert("Zip Code couldn't be located."); 
      } 
     }); 
    } 
    else 
    { 
     alert('Please enter a valid US zip code.'); 
    } 
} 

经过这件事情之后,lat和lng仍设置为0.0,为什么?我不应该能够像这样设置它们吗?在javascript中设置外部范围变量from内部范围

编辑:我到了他们应该设置的位置,如果我在那里发出警告,我可以看到他们应该设置的值。

回答

2

geocoder.geocode回调不会立即运行,它会延迟到AJAX调用回来。范围没有问题,直到XHR完成后,变量才会被更改。

如果您正在改变它们,请尝试在geocoder回调函数中放置依赖代码(或调用函数)。

+1

我看到它的运行并执行其他代码,而不先运行geocode成功方法。疑难杂症。谢谢 – Scott 2011-04-07 21:14:46

+0

@Scott你可以请小提琴的解决方案吗? – Dhaval 2013-03-20 07:29:40

+0

@Dhaval - 这个问题是2岁。 StackOverflow是一种资源,不是人们让他人为他们工作的地方。 – 2013-03-20 21:05:30