我试图从地理编码中获取lat和lng,并希望将这些信息作为对象分配给数组info=[]
。我使用的代码是
var info = [];
var lat;
var lng;
$.each($('.udc-search-table tbody tr'), function(index, value) {
var address = '.....';
var geocode = new google.maps.Geocoder();
geocode.geocode({address: address}, function(result, status) {
if( status == google.maps.GeocoderStatus.OK) {
lat = result[0].geometry.location.lat();
info.push({'lat' : lat});
}
});
console.log(lat); // undefined and why here it is undefined
});
console.log(info); // here it is working
// [{lat : .....}, {lat : ....}] working
此外,当我将变量info
用于ajax数据时,从服务器响应来看,它只是将空的数组显示为string 2 "[]"
。
$.ajax({
url: udc.ajax_url,
type: 'POST',
data: {
action : 'udc_update_latlng',
latlng : JSON.stringify(info)
},
success: function(data) {
console.log(data); // server response string 2 "[]"
}
});
但是,当我像这样将对象分配给info
变量时,ajax服务器的响应是正确的。我的意思是正在发送json字符串数据。
$.each($('.udc-search-table tbody tr'), function(index, value) {
var ID = $(this).attr('id');
info.push({'id' : ID});
});
实际上,我需要将lat和lng分配给info
变量来完成我的任务。实际问题是什么?
Try the full code below
var info = [];
var lat;
var lng;
var count = 5; //total row count
var i = 1;
$.each($('.udc-search-table tbody tr'), function (index, value) {
var address = '.....';
var geocode = new google.maps.Geocoder();
geocode.geocode({address: address}, function (result, status) {
if (status == google.maps.GeocoderStatus.OK) {
lat = result[0].geometry.location.lat();
info.push({'lat': lat});
if (count === i) {
var data = JSON.stringify(info);
ajaxFuntion(data);
}
i++;
}
});
});
function ajaxFuntion(info) {
$.ajax({
url: udc.ajax_url,
type: 'POST',
data: {
action: 'udc_update_latlng',
latlng: info
},
success: function (data) {
console.log(data);
}
});
}