无法在 JavaScript 中将对象动态分配给数组

Can't assign object to array dynamically in JavaScript

我试图从地理编码中获取 latlng 并希望将这些信息作为对象分配给数组 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});
});

实际上我需要将 latlng 分配给 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);
            }
        });
    }