成功填充带有多个ajax调用的html表

时间:2017-02-21 19:21:28

标签: jquery ajax

我正在使用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的屏幕截图 -

enter image description here

1 个答案:

答案 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);
            }
         });
    });
});

我相信这会让你更接近你想要做的事情吗?