将json数组从函数返回到变量

时间:2012-11-22 17:05:05

标签: javascript google-maps

我正在开发一个脚本,以便通过地址从谷歌地图获取latlng。

如果我在函数alert(jsonarr.lat);中放置map_address(),我会得到正确的值,但是如果我将结果赋给这样的变量:

var coord = map_address('address');

alert(coord.lat);   

我收到错误coord is undefined

function map_address(addr)
    {

        var input_address = addr;
        var geocoder = new google.maps.Geocoder();
        geocoder.geocode( { address: input_address }, function(results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                var lat = results[0].geometry.location.lat();
                var lng = results[0].geometry.location.lng();


                      jsonarr={'lat':lat,'lng':lng}
                      alert(jsonarr.lat);
                      return jsonarr;           
            } else {
                alert("Nessuna coordinata trovata da questo indirizzo!");
            }
        });
    }

3 个答案:

答案 0 :(得分:1)

geocoder.geocode(..);函数是异步的,因为它包含了另一个函数,稍后在地理编码操作完成时会调用它。

因此map_address(...)将始终返回undefined

答案 1 :(得分:1)

试试这样:

function map_address(addr, callback) {

    var input_address = addr;
    var geocoder = new google.maps.Geocoder();
    geocoder.geocode( { address: input_address }, function(results, status) {
        if (status == google.maps.GeocoderStatus.OK) {
            var lat = results[0].geometry.location.lat();
            var lng = results[0].geometry.location.lng();


                               jsonarr={'lat':lat,'lng':lng}
                               alert(jsonarr.lat);
                               callback(jsonarr) ;


                            }
        else {
            alert("Nessuna coordinata trovata da questo indirizzo!");
            }
        });
}
map_address("hogehoge", function(result){
  alert(result)
});

答案 2 :(得分:0)

感谢大家的回答,我把所有代码放在回调中,一切正常,这是最终的代码。

   function map_address(addr,callback)
        {

            var input_address = addr;
            var geocoder = new google.maps.Geocoder();
            geocoder.geocode( { address: input_address }, function(results, status) {
                if (status == google.maps.GeocoderStatus.OK) 
                {
                    var lat = results[0].geometry.location.lat();
                    var lng = results[0].geometry.location.lng();

                    jsonarr={'lat':lat,'lng':lng}                       
                    return callback(jsonarr);                        
                }
                else {
                    alert("No coord find");
                }
            });
        }


$(document).ready(function(){ 
   $(window).load(function(){ 

map_address('address string',function(coord){


  var center=new google.maps.LatLng(coord.lat,coord.lng);



  var settings = {
          zoom: 16,
          center: center,
          mapTypeControl: false,
          mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
          navigationControl: true,
          navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
          mapTypeId: google.maps.MapTypeId.ROADMAP
      }; 

  var map=new google.maps.Map(document.getElementById("map"), settings);

var marker = new google.maps.Marker({
position: new google.maps.LatLng(coord.lat,coord.lng),
map: map
});


});
});

});