我正在使用ajax api调用来填充html表。该表的第一列是(item.name),我正在嵌套第二个ajax调用,用日期填充第二列(顺便说一下,日期是从epoch开始以微秒为单位...我将继续工作稍后格式化)。我嵌套的原因是因为第二个调用是使用url中第一次调用的部分结果。这是代码:
HTML
<div id="output">
<table id="scalaapi">
<tbody>
<tr><td></td><td class="uuid"></td></tr>
</tbody>
</table>
</div>
AJAX
$.ajax({
type: 'GET',
url: "https://avacmd25.scala.com:44335/ContentManager/api/rest/players?offset=0&sort=name&filters=%7BplayerStatus%20:%20%7Bvalues:%5B'HEARTBEAT_OVERDUE'%5D,%20comparator%20:%20'eq'%7D%7D",
dataType: "json",
success: function(data) {
var list = data.list;
$.each(list, function(i, item) {
var tr = $('<tr>').append('<td>' + (item.name) + '</td>' + '<td>'+
$.ajax({
type: 'GET',
url: "https://avacmd25.scala.com:44335/ContentManager/api/rest/heartbeats/sequence/"+(item.uuid),
dataType: "text",
crossDomain: true,
success: $.each(function(results) {
$('.uuid').text(results);
})
})
+ '</td>');
$("#scalaapi").append(tr);
});
}
})
我得到了一个混合结果......第一个api调用正在按预期工作,尽管它正在跳过第一行。 第二个api调用只返回第一个记录,它不跳过第一行,后续行显示[object Object]
resuts的屏幕截图 -
答案 0 :(得分:3)
您在代码中做了很多事情,您可以立即执行操作而无需先等待AJAX调用完成。尝试重新构建你的javascript以使其更耐心(下面是伪代码,我已经删除了大部分额外的AJAX配置内容,希望能让代码更清晰:)
$.ajax({..., success: function(data) {
// when we get here the first AJAX call has returned
// loop through each item in the response from the first AJAX call
$.each(data.list, function(i, item) {
// append the <tr> to the table with the information we have for the item and a placeholder for the second cell
var tr = $('<tr><td>'+item.name+'</td><td class="uuid">...</td></tr>').appendTo('#scalaapi');
// make the second AJAX call for this item
$.ajax({
url:".../sequence/"+item.uuid,
...,
success: function(result) {
// we now have the contents we need for the second <td>, so insert it
tr.find('.uuid').text(result);
}
});
});
});
我相信这会让你更接近你想要做的事情吗?