javascript - 无法读取未定义 AJAX 的属性 'length'

标签 javascript jquery json ajax

我已经彻底搜索了这个问题,但我的代码中没有得到任何结果。

我这里有一个简单的 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;
}

那个不起作用,但是当我对列表进行硬编码时,它会从硬编码列表中生成一个表。有人可以解释我在代码中做错或遗漏了什么吗?谢谢。

最佳答案

这两行是一个问题:

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

首先,您的 getAJAXData 函数不会返回任何内容,因此 objRecords 将始终未定义。

其次,即使它确实返回了某些内容,它也是一个异步调用,因此数据不会立即准备好。

您需要做的是将代码的相关部分包装到一个函数中,并在成功回调上调用它,以便它仅在您的 AJAX 数据准备好后才执行。

关于javascript - 无法读取未定义 AJAX 的属性 'length',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712516/

相关文章:

php - 检查json网址工程file_get_contents

javascript - Uncaught Error : 'node' must be a RefObject when passing a React. RefObject

javascript - 如何为slideDown添加一键向上滚动功能?

javascript - 这段 JavaScript 代码如何对这些数字进行排序?

javascript - 如何替换元素标签,然后将其添加到现有元素?

python - JSON 请求出现类型错误

javascript - 比较 IF 语句中的字符串

javascript - 通过 AJAX 函数循环 - 导致无限循环

javascript - 如何触发childNode点击事件

android - 使用 Retrofit 进行修补 - 仅限 ID 属性