I use bootstrap-table, because the data is displayed by one of the list from the objects returned from the backend, so I cannot write the interface and return the data directly in the js configuration. I default to how to render the data to table by default after the data is requested by ajax. I see that most of the online tutorials are rendered dynamically from the server.
I hope there is a god who can teach me a reliable solution that can get data such as ajax and render it to the page!
Let"s assume that I"ve got an array of data projectList
.  
 
var $table =  $("-sharpprojectTable"),
    $remove = $("-sharpremove"),
    selections = [];
function initTable() {
    $table.bootstrapTable({
        height: getHeight(),
        data:data1,
        method:"get",
        url:"/",
        toolbar:"-sharptoolbar",
        cache: false, //  false  AJAX  true
        striped: true,  //false
        pagination: true, // false
        pageList: [10, 20, 50, 100, "ALL"], // 
        pageSize: 10, // 
        pageNumber: 1, // 
        sidePagination: "client", // 
        /*queryParams: function (params) { // false
            return {
                pageSize: params.limit, // 
                offset: params.offset, // 
                sort: params.sort, // 
                sortOrder: params.order, // 
                dataId: $("-sharpdataId").val() // 
            }
        },*/
        sortName: "id", // 
        sortOrder: "desc", // ,
        search: true,                       //
        strictSearch: true,
        showColumns: true,                  //
        showRefresh: true,                  //
        minimumCountColumns: 2,             //
        clickToSelect: true,                //
        uniqueId: "ID",                     //
        // showToggle:true,                    //
        cardView: false,                    //
        detailView: false,                   //
        showExport: true,
        exportDataType: "all",
        exportTypes:[ "csv","excel","pdf"],  //
        columns: [
            {
                checkbox: true, // 
                align: "center" // 
            }, {
                field: "statusOrder", // jsonname
                title: "", // 
                align: "center", // 
                valign: "middle", // 
                sortable: true,
                /*editable: {
                    type: "text",
                    title: "",
                    validate: function (value) {
                        value = $.trim(value);
                        if (!value) {
                            return "";
                        }
                        if (!/^\+?[1-9][0-9]*$/.test(value)) {
                         return "0."
                         }
                    }
                },*/
            }, {
                field: "statusName",
                title: "",
                align: "center",
                valign: "middle",
                sortable: true,
                /*editable: {
                    type: "text",
                    title: "",
                    validate: function (value) {
                        value = $.trim(value);
                        if (!value) {
                            return "";
                        }
                        var data = $table.bootstrapTable("getData"),
                            index = $(this).parents("tr").data("index");
                        console.log(data[index]);
                        return "";
                    }
                },*/
            }, {
                field: "statusInfo",
                title: "",
                align: "center",
                valign: "middle",
                sortable: true,
                /*editable: {
                    type: "text",
                    title: "",
                    validate: function (value) {
                        value = $.trim(value);
                        if (!value) {
                            return "";
                        }
                        var data = $table.bootstrapTable("getData"),
                            index = $(this).parents("tr").data("index");
                        console.log(data[index]);
                        return "";
                    }
                },*/
            }, {
                field: "formModels",
                title: "",
                align: "center",
                valign: "middle",
                /*editable: {
                    type: "text",
                    title: "",
                    validate: function (value) {
                        value = $.trim(value);
                        if (!value) {
                            return "This field is required";
                        }
                        if (!/^\$/.test(value)) {
                            return "This field needs to start width $."
                        }
                        var data = $table.bootstrapTable("getData"),
                            index = $(this).parents("tr").data("index");
                        console.log(data[index]);
                        return "";
                    }
                },*/
            }, {
                field: "tableModels",
                title: "",
                align: "center",
                valign: "middle",
                /*editable: {
                    type: "text",
                    title: "",
                    validate: function (value) {
                        value = $.trim(value);
                        if (!value) {
                            return "This field is required";
                        }
                        if (!/^\$/.test(value)) {
                            return "This field needs to start width $."
                        }
                        var data = $table.bootstrapTable("getData"),
                            index = $(this).parents("tr").data("index");
                        console.log(data[index]);
                        return "";
                    }
                },*/
            },{
                title: "",
                align: "center",
                valign: "middle",
                width: 160, // px
                formatter: function (value, row, index) {
                    return "<button class="btn btn-primary btn-sm" onclick="del(\"" + row.field + value + "\")"></button>";
                }
            }
        ],
        onLoadSuccess: function(){  //
            console.info("");
        },
        onLoadError: function(){  //
            console.info("");
        }
        /*columns: [
         [
         {
         field: "state",
         checkbox: true,
         rowspan: 1,
         align: "center",
         valign: "middle"
         }, {
         title: "Item ID",
         field: "id",
         rowspan: 1,
         align: "center",
         valign: "middle",
         sortable: true,
         footerFormatter: totalTextFormatter
         }, {
         title: "Item Detail",
         field: "detail",
         colspan: 3,
         rowspan: 1,
         align: "center"
         }
         ],
         /!*[
         {
         field: "name",
         title: "Item Name",
         sortable: true,
         editable: true,
         footerFormatter: totalNameFormatter,
         align: "center"
         }, {
         field: "price",
         title: "Item Price",
         sortable: true,
         align: "center",
         editable: {
         type: "text",
         title: "Item Price",
         validate: function (value) {
         value = $.trim(value);
         if (!value) {
         return "This field is required";
         }
         if (!/^\$/.test(value)) {
         return "This field needs to start width $."
         }
         var data = $table.bootstrapTable("getData"),
         index = $(this).parents("tr").data("index");
         console.log(data[index]);
         return "";
         }
         },
         footerFormatter: totalPriceFormatter
         }, {
         field: "operate",
         title: "Item Operate",
         align: "center",
         events: operateEvents,
         formatter: operateFormatter
         }
         ]*!/
         ]*/
    });
    // sometimes footer render error.
    setTimeout(function () {
        $table.bootstrapTable("resetView");
    }, 200);
    $table.on("check.bs.table uncheck.bs.table " +
        "check-all.bs.table uncheck-all.bs.table", function () {
        $remove.prop("disabled", !$table.bootstrapTable("getSelections").length);
        // save your data, here just save the current page
        selections = getIdSelections();
        // push or splice the selections if you want to save all data selections
    });
    $table.on("expand-row.bs.table", function (e, index, row, $detail) {
        if (index % 2 == 1) {
            $detail.html("Loading from ajax request...");
            $.get("LICENSE", function (res) {
                $detail.html(res.replace(/\n/g, "<br>"));
            });
        }
    });
    $table.on("all.bs.table", function (e, name, args) {
        console.log(name, args);
    });
    $remove.click(function () {
        var ids = getIdSelections();
        $table.bootstrapTable("remove", {
            field: "id",
            values: ids
        });
        $remove.prop("disabled", true);
    });
    $(window).resize(function () {
        $table.bootstrapTable("resetView", {
            height: getHeight()
        });
    });
}
function getIdSelections() {
    return $.map($table.bootstrapTable("getSelections"), function (row) {
        return row.id
    });
}
function responseHandler(res) {
    $.each(res.rows, function (i, row) {
        row.state = $.inArray(row.id, selections) !== -1;
    });
    return res;
}
function detailFormatter(index, row) {
    var html = [];
    $.each(row, function (key, value) {
        html.push("<b>" + key + ":</b> " + value + "
");
    });
    return html.join("");
}
function operateFormatter(value, row, index) {
    return [
        "<a class="like" href="javascript:void(0)" title="Like">",
        "<i class="glyphicon glyphicon-heart"></i>",
        "</a>  ",
        "<a class="remove" href="javascript:void(0)" title="Remove">",
        "<i class="glyphicon glyphicon-remove"></i>",
        "</a>"
    ].join("");
}
window.operateEvents = {
    "click .like": function (e, value, row, index) {
        alert("You click like action, row: " + JSON.stringify(row));
    },
    "click .remove": function (e, value, row, index) {
        $table.bootstrapTable("remove", {
            field: "id",
            values: [row.id]
        });
    }
};
function totalTextFormatter(data) {
    return "Total";
}
function totalNameFormatter(data) {
    return data.length;
}
function totalPriceFormatter(data) {
    var total = 0;
    $.each(data, function (i, row) {
        total += +(row.price.substring(1));
    });
    return "$" + total;
}
function getHeight() {
    return $(window).height() - $("h1").outerHeight(true);
}
function del(field,values) {
    $("-sharpprojectTable").bootstrapTable("remove",filed,values);
}
function delMore(id) {
    $("-sharpprojectTable").bootstrapTable("removeByUniqueId    ",id);
}
$(function () {
    var scripts = [
            "https://cdn.bootcss.com/bootstrap-table/1.12.1/bootstrap-table.min.js",
            // location.search.substring(1) || "https://cdn.bootcss.com/bootstrap-table/1.12.1/bootstrap-table.min.js",
            "https://cdn.bootcss.com/bootstrap-table/1.12.1/extensions/export/bootstrap-table-export.min.js",
            // "http://rawgit.com/hhurz/tableExport.jquery.plugin/master/tableExport.js",
            "https://cdn.bootcss.com/bootstrap-table/1.12.1/extensions/editable/bootstrap-table-editable.min.js",
            "https://cdn.bootcss.com/x-editable/1.5.1/bootstrap3-editable/js/bootstrap-editable.min.js"
        ],
        eachSeries = function (arr, iterator, callback) {
            callback = callback || function () {
                };
            if (!arr.length) {
                return callback();
            }
            var completed = 0;
            var iterate = function () {
                iterator(arr[completed], function (err) {
                    if (err) {
                        callback(err);
                        callback = function () {
                        };
                    }
                    else {
                        completed += 1;
                        if (completed >= arr.length) {
                            callback(null);
                        }
                        else {
                            iterate();
                        }
                    }
                });
            };
            iterate();
        };
    eachSeries(scripts, getScript, initTable);
});
function getScript(url, callback) {
    var head = document.getElementsByTagName("head")[0];
    var script = document.createElement("script");
    script.src = url;
    var done = false;
    // Attach handlers for all browsers
    script.onload = script.onreadystatechange = function () {
        if (!done && (!this.readyState ||
            this.readyState == "loaded" || this.readyState == "complete")) {
            done = true;
            if (callback)
                callback();
            // Handle memory leak in IE
            script.onload = script.onreadystatechange = null;
        }
    };
    head.appendChild(script);
    // We handle everything using the script element injection
    return undefined;
}
//cookie   cookie
function getCookie(name) {
    var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
    if(arr=document.cookie.match(reg))
        return unescape(arr[2]);
    else
        return null;
}
