有什么方法可以初始化 jquery 数据表中的详细信息吗?

is there any way to initialize details in jquery datatable?

我在 jquery 数据 table 详细信息初始化方面遇到问题。 我需要在页面加载后获取 table 打开的详细信息。

我有以下代码:

  function format(d) {
   return d;
   }
  $(document).ready(function () {

    $.ajax({
        type: "GET",
        dataType: "json",
        url: "/SHOP/Promotions/GenerateDetailsToJson",  //teraz w tym miejscu inicjuję dane do tabel
        success: function (result) {
            SetDetails(result);
        },
        error: function () {
            alert("Wystąpił nieoczekiwany błąd");
        }
    })

    dt = $('#table').DataTable(
        {   
            "aoColumnDefs": [
      { 'bSortable': false, 'aTargets': [0, 6, 7] }
            ]
        }
        );
      dt.on('draw', function () {
        $.each(detailRows, function (i, id) {
            $('#' + id + ' td:first-child').trigger('click');
        });
    });

    $('#table').DataTable();}

     var table_length = $('#table tbody tr').length; //HERE iS PROBLEM 

    var tr = document.getElementsByClassName("details");

    for (var i = 0; i < table_length; i++) {
        var row = dt.row(tr[i]);
        row.child(format(details[i])).show();
    }
      );

问题出在上面代码的最后几行。 这些行需要初始化并打开所有 jquery 数据 table 的详细信息,但这些函数不会及时执行,也不会显示任何内容。 我试过使用超时,它工作得更好,但不像想要的那样,并且有几次刷新没有数据 如果您知道任何解决方案,请提供帮助。

您必须等待 ajax 请求完成。

例如:

$(document).ready(function () {
    $.ajax({
        //...
        success: function (result) {
            SetDetails(result);
            process();
        }
    });

    function process() {
        var table_length = $('#table tbody tr').length;

        var tr = document.getElementsByClassName("details");

        for (var i = 0; i < table_length; i++) {
            var row = dt.row(tr[i]);
            row.child(format(details[i])).show();
        }
    }
});

1:尝试删除数据表代码之前的 ajax 调用(可能 ajax 调用中存在一些错误导致下面的代码无法运行)

2:在 ajax 调用中,我认为 url 是错误的。

3: 是否存在setdetails函数,如果不存在,则代码会报错

4:在 firefox 浏览器中尝试 运行 您的代码(启用 firebug),如果您不知道 firebug,请尝试谷歌搜索,但建议使用 firebug(很有帮助)

尝试使用 $.when.then 以便您可以等待 ajax 完成,然后执行剩余的初始化,如下所示:

$.when(
$.ajax({
      ....
      ....
})).then(function()
{
    dt = $('#table').DataTable(
        .... 
        ....
    });
    //Other initializations.
});