2011-12-21 4 views
0

私はlatとlngの値を返すために非同期を使用するgoogle mapsジオコーダを使用しています。完璧に動作します。私はそれらの緯度経度を検索するために私のデータベースへのajax呼び出しに渡したいと思います。非同期部分がいつajax部分を実行するために行われたかを知る方法はわかりません。Googleはgeocoderをあまりにも多くの再帰を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

私はそれを見るように、あなたのコードが間違って唯一のことは、あなたが唯一のシリアル化されたフォームデータを送信している、あなたの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); 
    } 
}); 
関連する問題