【问题标题】:How can I use drawCallback to execute code after data has been retrieved?检索数据后如何使用 drawCallback 执行代码?
【发布时间】:2016-04-12 19:37:10
【问题描述】:

使用 DataTables 插件我正在尝试做的是:

  1. 从函数GetData1获取数据
  2. 一旦检索到数据,将该数据存储在var dataQuery1
  3. 从函数GetData2获取数据
  4. dataQuery1 行添加到表中

从函数GetData1 获取数据需要一段时间。因此,dataQuery1 [dataQuery1.length 显示为零] 中没有存储任何数据。我认为drawCallback应该解决这个问题。相反,我得到了错误:

无法读取未定义的属性“数据”。

var resourcetable = $('#table').DataTable({
"ajax": {
"url": "QueryDataService.asmx/GetData1",
"dataSrc": ""
},
"columns": [
    { "data": "Column1" },
    { "data": "Column2" },
    { "data": "Column3" }
],
"drawCallback": function (settings) {
     var dataQuery1 = resourcetable.data(); //Point of Failure
     alert('The table has ' + dataQuery1.length + ' rows');//Shows zero rows
     resourcetable.ajax.url("QueryDataService.asmx/GetData2").reload();
     resourcetable.rows.add(data).draw()
});

在步骤 1 完成后,是否还有执行步骤 2、3、4 的方法?

【问题讨论】:

  • 什么是resourceusagetable?它是另一个数据表实例,还是一个错字并且应该是可资源的?
  • 亚当,我错了。感谢您指出。我已经更新了我的问题。
  • 感谢分享链接 Gyrocode.com。我用$.when(x,y).done(function(a,b){}得到两个json数据集,然后用$.merge合并数据。

标签: javascript jquery ajax datatables


【解决方案1】:

为了他人的利益分享我的最终解决方案。

var set1 = $.ajax({
            url: "Url1.asmx/GetData1",
            type: "GET",
            dataType: "json"
        });

var set2 = $.ajax({
            url: "Url2.asmx/GetData2",
            type: "GET",
            dataType: "json"
        });

$.when(set1, set2).done(function (dataset1, dataset2) {
            var data = $.merge(dataset1[0], dataset2[0]);
            $('#table').DataTable({
                "aaData": data,
                "aoColumns": [
                    { "data": "Column1" },
                    { "data": "Column2" },
                    { "data": "Column3" }
                ]
            });
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    相关资源
    最近更新 更多