如何通过制表符中的 ajax 加载列

How load columns via ajax in tabulator

我正在尝试使用以下方法在制表符 4.5 中加载列:

var table = new Tabulator("#tables", {
    ajaxURL:"worker.php?data",
    ajaxRequestFunc:queryRealm,
    cellEdited:cEdit,
    history:true,
    clipboard:true,
    //autoColumns:true,
    clipboardPasteAction:"replace",
    layout:"fitData",
    columns:getColumns,
});

function getColumns(){
    return new Promise(function(resolve, reject){
        $.ajax({
            url: "worker.php?columns",
            success: function(data){
                resolve(data);
            },
            error: function(error){
                reject(error);
            }
        })
    });
}

但我收到错误消息:

tabulator.min.js:4 Uncaught TypeError: this.options.columns.slice is not a function
    at t.u._clearObjectPointers (tabulator.min.js:4)
    at t.u._create (tabulator.min.js:4)
    at new t (tabulator.min.js:4)
    at (index):84

请告诉我,如何通过 ajax 将列加载到制表符中?

您不能将异步函数传递给列参数。它需要一个列数组。

因此,与其将 getColumns 传递到列选项中,不如从 getColumns 中获取值,然后将其传递到制表符选项中。

我重新整理了一些你的代码,我相信这应该可以。

function getColumns(){
    return new Promise(function(resolve, reject){
        $.ajax({
            url: "worker.php?columns",
            success: function(data){
                resolve(data);
            },
            error: function(error){
                reject(error);
            }
        })
    });
}

getColumns().then((columns) => {
  var table = new Tabulator("#tables", {
    ajaxURL:"worker.php?data",
    ajaxRequestFunc:queryRealm,
    cellEdited:cEdit,
    history:true,
    clipboard:true,
    //autoColumns:true,
    clipboardPasteAction:"replace",
    layout:"fitData",
    columns:columns,
  });
});