Javascript 无法读取属性';长度';未定义AJAX的定义
我一直在搜索这个问题,但我的代码中没有得到任何结果 这里有一个简单的JSON解析器,它基于端点返回的JSON对象创建一个表。以下是我到目前为止所做的尝试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)
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调用返回数据之前运行,因此当您尝试使用该数据时,它是未定义的