Javascript 无法读取属性';长度';未定义AJAX的定义

Javascript 无法读取属性';长度';未定义AJAX的定义,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我一直在搜索这个问题,但我的代码中没有得到任何结果 这里有一个简单的JSON解析器,它基于端点返回的JSON对象创建一个表。以下是我到目前为止所做的尝试 function getAJAXData(APIurl){ $.ajax({ url: APIurl, type: "GET", dataType: "json" }).then(function(data){ alert(data); }); } function generateTable(tableId)

我一直在搜索这个问题,但我的代码中没有得到任何结果

这里有一个简单的JSON解析器,它基于端点返回的JSON对象创建一个表。以下是我到目前为止所做的尝试

function getAJAXData(APIurl){
$.ajax({
    url: APIurl,
    type: "GET",
    dataType: "json"
}).then(function(data){
    alert(data);
});
}

function generateTable(tableId){

var objRecords = getAJAXData("http://jsonplaceholder.typicode.com/posts");
var cols = addTableHeaders(objRecords, tableId);

for(var i = 0; i < objRecords.length; i++){

    var tRow = $('<tr/>');

    for (var colIdx = 0; colIdx < cols.length ; colIdx++){

        var cellVal = objRecords[i][cols[colIdx]];

        cellVal = (cellVal == null) ? "" : cellVal; 

        tRow.append($('<td/>').html(cellVal)); 
    }
    $(tableId).append(tRow);
}
}

function addTableHeaders(myList, tableId){
var colSet = [];
var headers = $('<tr/>');

for (var i = 0; i < myList.length; i++) {
    var hRow = myList[i];
    for(var key in hRow){
        if($.inArray(key, colSet) == -1){
            colSet.push(key);
            headers.append( $('<th/>').html(key) );
        }
    }
}
$(tableId).append(headers);

return colSet;
}
函数getAJAXData(apirl){ $.ajax({ url:APIurl, 键入:“获取”, 数据类型:“json” }).then(功能(数据){ 警报(数据); }); } 函数generateTable(tableId){ var objRecords=getAJAXData(“http://jsonplaceholder.typicode.com/posts"); var cols=addTableHeaders(objRecords,tableId); for(var i=0;i
这个方法不起作用,但当我硬编码一个列表时,它会从硬编码的列表生成一个表。有人能解释一下我在代码中做错了什么或遗漏了什么吗?谢谢。

您需要在ajax success中调用addTableHeaders

$.ajax({
    url: APIurl,
    type: "GET",
    dataType: "json",
    success: function(data){
    //call it  here
    }
})

});

您需要在ajax success中调用addTableHeaders

$.ajax({
    url: APIurl,
    type: "GET",
    dataType: "json",
    success: function(data){
    //call it  here
    }
})

});

这两条线是一个问题:

var objRecords = getAJAXData("http://jsonplaceholder.typicode.com/posts");
var cols = addTableHeaders(objRecords, tableId);
首先,您的
getAJAXData
函数不会返回任何内容,因此
objRecords
始终是未定义的

第二,即使它确实返回了一些东西,它也是一个异步调用,因此数据不会马上准备好


您需要做的是将代码的相关部分封装到一个函数中,并在成功回调时调用它,以便只有在AJAX数据准备就绪后才能执行它。

这两行是一个问题:

var objRecords = getAJAXData("http://jsonplaceholder.typicode.com/posts");
var cols = addTableHeaders(objRecords, tableId);
首先,您的
getAJAXData
函数不会返回任何内容,因此
objRecords
始终是未定义的

第二,即使它确实返回了一些东西,它也是一个异步调用,因此数据不会马上准备好


您需要做的是将代码的相关部分封装到一个函数中,并在成功回调时调用它,这样它只有在AJAX数据就绪后才能执行。

这是因为AJAX的工作方式,整个for循环在AJAX调用返回数据之前运行,因此,当您尝试使用该数据时,它是未定义的。这是因为ajax的工作方式,整个for循环在ajax调用返回数据之前运行,因此当您尝试使用该数据时,它是未定义的