Javascript 在视图(JS)中填充表时未定义的值

Javascript 在视图(JS)中填充表时未定义的值,javascript,jquery,google-api,Javascript,Jquery,Google Api,我有js函数从谷歌api获取速度限制 这是代码 function getSpeedData() { //Getting dates from dates inputs and imei var start = $('#startDate').val(); var stop = $('#endDate').val(); var imei = parseInt($('#selectVehicles').val()); //Converting to needed format var newst

我有js函数从谷歌api获取速度限制

这是代码

function getSpeedData() {
//Getting dates from dates inputs and imei
var start = $('#startDate').val();
var stop = $('#endDate').val();
var imei = parseInt($('#selectVehicles').val());


//Converting to needed format
var newstart = moment(start, "DD/MM/YYYY").format("YYYY-MM-DD");
var newstop = moment(stop, "DD/MM/YYYY").format("YYYY-MM-DD");


//Getting data from back-end
var roadsapikey = "**********";
var dburl = $('#getData').data('request-url');
var path = 'path= ';
var model = {
    start: newstart,
    end: newstop,
    imei: imei
};
$.ajax({
    url: dburl,
    dataType: 'json',

    type: 'GET',
    data: model,
    success: function (data) {
        if (data.length !== 0) {
            speeddata = data;
            for (var i = 0; i < speeddata.length; i++) {
                path = "path=" + speeddata[i].Latitude2 + ',' + speeddata[i].Longitude2;
                var googleurl = "https://roads.googleapis.com/v1/speedLimits?"
                    + path + "&key=" + roadsapikey;
                $.ajax({
                    url: googleurl,
                    dataType: 'json',
                    type: 'GET',
                    success: function (data) {
                        speedlimits = data;
                        for (var i = 0; i < speedlimits.speedLimits.length; i++) {
                            speedobject.push({
                                speedlimits: speedlimits.speedLimits[i].speedLimit
                            });
                            speeddata.forEach((item, index) => Object.assign(item, speedobject[index]));

                        }


                    }

                });
            }
            console.log(speeddata);
            for (i = 0; i < speeddata.length; i++) {
                $('#speeddata').append('<tr>' + '<td id="imei">' + speeddata[i].Imei + '</td>' +
                    '<td id="lat">' + speeddata[i].Latitude2 + '</td>' +
                    '<td id="lng">' + speeddata[i].Longitude2 + '</td>' +
                    '<td id="speed">' + speeddata[i].Speed + '</td>' +
                    '<td id="speedlimit">' + speeddata[i].speedlimits + '</td>' + '</tr>');
            }
        }
    },
    error: function () {
        alert("Error");
    }
});
函数getSpeedData(){ //从日期输入和imei获取日期 var start=$('#startDate').val(); var stop=$('#endDate').val(); var imei=parseInt($('#selectVehicles').val(); //转换为所需格式 var newstart=时刻(开始,“DD/MM/YYYY”)。格式(“YYYY-MM-DD”); var newstop=时刻(停止,“DD/MM/YYYY”)。格式(“YYYY-MM-DD”); //从后端获取数据 var roadsapikey=“**********”; var dburl=$('#getData').data('request-url'); 变量路径='路径='; var模型={ 开始:newstart, 完:新闻头条,, 伊梅:伊梅 }; $.ajax({ url:dburl, 数据类型:“json”, 键入:“GET”, 数据:模型, 成功:功能(数据){ 如果(data.length!==0){ 速度数据=数据; 对于(变量i=0;iObject.assign(项目,speedobject[index]); } } }); } 控制台日志(speeddata); 对于(i=0;i }

在第一步中,我从db中获取值。之后,对于每个值,我都会得到lat和lng,并在for循环中创建路径,向googleapi发送请求并获得响应。从这个响应中,我得到speedLimit属性并将这些属性写入新数组。在此之后,我将合并数组

这是我合并后在控制台中看到的

合并后,我需要创建表(仅数据)并用值填充它

这是代码的这一部分

 for (i = 0; i < speeddata.length; i++) {
                $('#speeddata').append('<tr>' + '<td id="imei">' + speeddata[i].Imei + '</td>' +
                    '<td id="lat">' + speeddata[i].Latitude2 + '</td>' +
                    '<td id="lng">' + speeddata[i].Longitude2 + '</td>' +
                    '<td id="speed">' + speeddata[i].Speed + '</td>' +
                    '<td id="speedlimit">' + speeddata[i].speedlimits + '</td>' + '</tr>');
            }
for(i=0;i
但我有这个想法

我的错在哪里?属性似乎是正确的


感谢您的帮助。

您应该在第二次ajax成功fn中创建阵列。创建字符串时未定义speedlimit属性

像这样:

    ...
    success: function (data) {
        if (data.length !== 0) {
            speeddata = data;
            for (var i = 0; i < speeddata.length; i++) {
                path = "path=" + speeddata[i].Latitude2 + ',' + speeddata[i].Longitude2;
                var googleurl = "https://roads.googleapis.com/v1/speedLimits?"
                    + path + "&key=" + roadsapikey;
                $.ajax({
                    url: googleurl,
                    dataType: 'json',
                    type: 'GET',
                    success: function (data) {
                        speedlimits = data;
                        for (i = 0; i < speeddata.length; i++) {
                            $('#speeddata').append('<tr>' + '<td id="imei">' + speeddata[i].Imei + '</td>' +
                                '<td id="lat">' + speeddata[i].Latitude2 + '</td>' +
                                '<td id="lng">' + speeddata[i].Longitude2 + '</td>' +
                                '<td id="speed">' + speeddata[i].Speed + '</td>' +
                                '<td id="speedlimit">' + speedlimits.speedLimits[i].speedlimit + '</td>' + '</tr>');
                        }       
                    }

                });
            }

        }
    }
    ...
。。。
成功:功能(数据){
如果(data.length!==0){
速度数据=数据;
对于(变量i=0;i
console.log
显示值的最终状态。它不显示呼叫时的状态。
如果您想查看调用时的值状态,请使用
console.dir

为什么要减少post?这很奇怪!控制台有什么错误吗?没有errors@HamzaAbdaouiIn控制台,请开发一排阵列并发布图片?我发现了问题。如果我将
async:false
设置为2
ajax
call,则所有okay@HamzaAbdaoui