如何在我的函数范围之外设置变量?

时间:2011-07-15 21:35:57

标签: javascript html5 geolocation

我正在尝试在函数外部的外部作用域中使用position.coords,但是我无法将一个全局var中的值移动到函数作用域外调用。我尝试了许多解决方案,包括窗口变量。在这种情况下,地理定位,新的google.maps.LatLng(iplat,iplong)为空。有人可以采用将position.coords放在函数getLocation范围之外的方法。

function getLocation(position)
{
    window.iplat = parseFloat(position.coords.latitude);
    window.iplong = parseFloat(position.coords.longitude);
}
function errorFunction(position) {
  alert('Error!');
}    
var geocoder;
var address;
var userlocation;
var curloc;

google.load("maps",'3',{other_params:'sensor=true'});
google.setOnLoadCallback(function()
{
    if (google.loader.ClientLocation)
    {
         geocoder = new google.maps.Geocoder();

        //html5    
        if(navigator.geolocation) {          
          navigator.geolocation.getCurrentPosition(getLocation);
        }
        else
        {
          curloc = google.loader.ClientLocation;
          iplat=parseFloat(curloc.latitude);
          iplong=parseFloat(curloc.longitude);          
        }
        var latlng = new google.maps.LatLng(iplat, iplong);
          if (geocoder) {
            geocoder.geocode({'latLng': latlng},function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
              if (results[1]){
                country_code=results[1]....;
              }
            } else {
              alert("Geocoder failed due to: " + status);
            }
            });
        }
        alert(country_code+":"+iplat+"||"+iplong); <--- NULL VALUES
      }

});

1 个答案:

答案 0 :(得分:1)

对谷歌api不太熟悉,我猜测你传递的是当时不存在的变量。 navigator.geolocation.getCurrentPosition接受回调参数(以及google.setOnLoadCallback)。确保所有需要的变量都向后呈现嵌套事件。

navigator.geolocation.getCurrentPosition(
  function(position){
    var iplat = parseFloat(position.coords.latitude),
        iplong = parseFloat(position.coords.longitude);

    alert(country_code+":"+iplat+"||"+iplong); //should work now!
    google.load("maps",'3',{other_params:'sensor=true'});
    google.setOnLoadCallback(function() { ... } ); // the rest of code
  }
);

希望有所帮助。