我一直在搜索这个问题,但我的代码中没有得到任何结果。
我这里有一个简单的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;
}
那个不起作用但是当我对列表进行硬编码时,它会从硬编码列表中生成一个表。有人可以解释我在代码中做错了什么或丢失了什么?谢谢。
答案 0 :(得分:3)
这两行是一个问题:
var objRecords = getAJAXData("http://jsonplaceholder.typicode.com/posts");
var cols = addTableHeaders(objRecords, tableId);
首先,您的getAJAXData
函数不会返回任何内容,因此objRecords
将始终未定义。
其次,即使它确实返回了某些内容,也是一个异步调用,因此数据不会立即就绪。
您需要做的是将代码的相关位包装到函数中并在成功回调上调用它,这样只有在您的AJAX数据就绪后才能执行它。
答案 1 :(得分:0)
你需要在ajax成功中调用addTableHeaders
$.ajax({
url: APIurl,
type: "GET",
dataType: "json",
success: function(data){
//call it here
}
})
});