Google使用ajax映射地理编码器过多的递归

时间:2011-12-21 05:29:56

标签: google-maps jquery google-maps-api-3 geocoding

我正在使用google maps geocoder,它使用异步来返回lat和lng值。它完美无缺。然后我想将这些lat lng值传递给我的数据库的ajax调用以进行搜索。我无法弄清楚如何知道异步部分何时完成然后运行ajax部分。

运行时,

lat和lng始终为空。

有更好的方法吗?


function getLatLng(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
     fn(results[0].geometry.location.lat(),results[0].geometry.location.lng()); 
  });
}

getLatLng(address, function(lat,lng){

        var formData = $('#form').serialize();      

        if (lat!='' && lng!='') {
              $.ajax({
              type: "POST",
              url: "/_templates/map_ajax",
              dataType:'json',
              data: formData,
              error: function() {
                $('#status').text('Update failed. Try again.').slideDown('slow');
              },
              success: function(formData) {                                                               
                buildMarkers(formData);             
              }                                   
             });        //ajax close    
        }

}); // close getLatLng

1 个答案:

答案 0 :(得分:1)

正如我所看到的,您的代码唯一的问题是您从未将lat / lng值发布到您的AJAX服务,您只发送序列化的表单数据。我将你的例子简化为:

function getLatLng(address, fn){
  geocoder.geocode( { 'address': address}, function(results, status) {
   fn(results[0].geometry.location.lat(),results[0].geometry.location.lng());
  });
}

getLatLng("new york", function(lat,lng){
  if (lat!='' && lng!='') {
  console.log(lat);
  console.log(lng);
  }
});