Javascript 检索全局变量

Javascript 检索全局变量,javascript,geocoding,Javascript,Geocoding,如何将城市值检索到位置对象中 var city = ""; var state = ""; geocoder = new google.maps.Geocoder(); var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); geocoder.geocode({ 'latLng': latlng }, function(results, status) { if (

如何将
城市
值检索到
位置
对象中

var city = "";
var state = "";
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
geocoder.geocode({
  'latLng': latlng
}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    //Check result 0
    var result = results[0];
    //look for locality tag and administrative_area_level_1
    for (var i = 0, len = result.address_components.length; i < len; i++) {
      var ac = result.address_components[i];
      if (ac.types.indexOf("locality") >= 0) city = ac.long_name;
      if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.long_name;
    }
  }
});

var location = {lat: position.coords.latitude, lng: position.coords.longitude, city: city};
var city=”“;
var state=“”;
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(position.coords.latitude,position.coords.longitude);
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
//检查结果0
var结果=结果[0];
//查找位置标记和管理区域级别1
对于(变量i=0,len=result.address\u components.length;i=0)city=ac.long\u name;
如果(ac.types.indexOf(“管理区\级别\ 1”)>=0)状态=ac.long\名称;
}
}
});
var location={lat:position.coords.lation,lng:position.coords.longitude,city:city};

geocoder.geocode
的调用是异步的。在异步代码返回之前,代码执行到达
var location
的声明;因此,城市尚未定义

更早声明位置,然后添加到回调函数中的location对象中

var location={lat:position.coords.latitude,lng:position.coords.longitude};
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(position.coords.latitude,position.coords.longitude);
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
//检查结果0
var结果=结果[0];
//查找位置标记和管理区域级别1
对于(变量i=0,len=result.address\u components.length;i=0)location.city=ac.long\u name;
如果(ac.types.indexOf(“管理区\级别\ 1”)>=0)location.state=ac.long\名称;
}
}
});

您可以在前面声明
位置
并在回调中使用它。像这样:

var city = "";
var state = "";
var location = {lat: position.coords.latitude, lng: position.coords.longitude}; // move `location` here
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
geocoder.geocode({
  'latLng': latlng
}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    //Check result 0
    var result = results[0];
    //look for locality tag and administrative_area_level_1
    for (var i = 0, len = result.address_components.length; i < len; i++) {
      var ac = result.address_components[i];
      if (ac.types.indexOf("locality") >= 0) {
        city = ac.long_name;
        location.city = city; // and assign the `city` field here
      }
      if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.long_name;
    }
  }
});
function geocode(position, callback) {
    var city = "";
    var state = "";
    var geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    geocoder.geocode({
      'latLng': latlng
    }, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        //Check result 0
        var result = results[0];
        //look for locality tag and administrative_area_level_1
        for (var i = 0, len = result.address_components.length; i < len; i++) {
          var ac = result.address_components[i];
          if (ac.types.indexOf("locality") >= 0) {
            city = ac.long_name;
            callback({
              lat: position.coords.latitude, 
              lng: position.coords.longitude,
              city: city
            });
          }
          if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.long_name;
        }
      }
    });
}

geocode(position, function(location) {
  // do whatever you would like to do with `location`.
})
var city=”“;
var state=“”;
变量位置={lat:position.coords.latitude,lng:position.coords.longitude};//在这里移动'location'
geocoder=新的google.maps.geocoder();
var latlng=新的google.maps.latlng(position.coords.latitude,position.coords.longitude);
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
//检查结果0
var结果=结果[0];
//查找位置标记和管理区域级别1
对于(变量i=0,len=result.address\u components.length;i=0){
城市=ac.long\u名称;
location.city=city;//并在此处指定'city'字段
}
如果(ac.types.indexOf(“管理区\级别\ 1”)>=0)状态=ac.long\名称;
}
}
});
但是,这并不实用,因为回调是异步的。如果将地理编码封装到一个函数中会更好。像这样:

var city = "";
var state = "";
var location = {lat: position.coords.latitude, lng: position.coords.longitude}; // move `location` here
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
geocoder.geocode({
  'latLng': latlng
}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {
    //Check result 0
    var result = results[0];
    //look for locality tag and administrative_area_level_1
    for (var i = 0, len = result.address_components.length; i < len; i++) {
      var ac = result.address_components[i];
      if (ac.types.indexOf("locality") >= 0) {
        city = ac.long_name;
        location.city = city; // and assign the `city` field here
      }
      if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.long_name;
    }
  }
});
function geocode(position, callback) {
    var city = "";
    var state = "";
    var geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
    geocoder.geocode({
      'latLng': latlng
    }, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        //Check result 0
        var result = results[0];
        //look for locality tag and administrative_area_level_1
        for (var i = 0, len = result.address_components.length; i < len; i++) {
          var ac = result.address_components[i];
          if (ac.types.indexOf("locality") >= 0) {
            city = ac.long_name;
            callback({
              lat: position.coords.latitude, 
              lng: position.coords.longitude,
              city: city
            });
          }
          if (ac.types.indexOf("administrative_area_level_1") >= 0) state = ac.long_name;
        }
      }
    });
}

geocode(position, function(location) {
  // do whatever you would like to do with `location`.
})
函数地理编码(位置,回调){
var city=“”;
var state=“”;
var geocoder=new google.maps.geocoder();
var latlng=新的google.maps.latlng(position.coords.latitude,position.coords.longitude);
地理编码({
“latLng”:latLng
},功能(结果、状态){
if(status==google.maps.GeocoderStatus.OK){
//检查结果0
var结果=结果[0];
//查找位置标记和管理区域级别1
对于(变量i=0,len=result.address\u components.length;i=0){
城市=ac.long\u名称;
回拨({
纬度:位置坐标纬度,
lng:position.coords.longitude,
城市:城市
});
}
如果(ac.types.indexOf(“管理区\级别\ 1”)>=0)状态=ac.long\名称;
}
}
});
}
地理编码(位置、功能(位置){
//用“位置”做任何你想做的事情。
})