我正在使用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
答案 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);
}
});