Javascript datatable jquery无法重新初始化datatable

Javascript datatable jquery无法重新初始化datatable,javascript,jquery,datatable,Javascript,Jquery,Datatable,我使用datatable jQuery插件将数据填充到表中。当用户按下按钮时,我需要从ajax调用中获取数据,并将数据填充到表中 我的ajax调用代码如下: function getJsonReport() { var startDate = $('#start_date').val(); var endDate = $('#end_date').val(); $.get('MonthlyReportAjax', {star

我使用datatable jQuery插件将数据填充到表中。当用户按下按钮时,我需要从ajax调用中获取数据,并将数据填充到表中

我的ajax调用代码如下:

function getJsonReport() {
            var startDate = $('#start_date').val();
            var endDate = $('#end_date').val();
            $.get('MonthlyReportAjax', {startDate : startDate , endDate : endDate}, function(responseText) {               

                var tableBody="";
                for(var x = 0 ; x < responseText["monthRecord"].length ; x++){
                    tableBody += "<tr><td>"+ responseText["monthRecord"][x].date +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].newSearch +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].newSubscribers +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].pm12 +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].pm3 +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].pm6 +"</td>"+
                                      "<td>"+ responseText["monthRecord"][x].newAdds +"</td>"+
                                   "</tr>"
                }

                $('#dailyTableBody').html(tableBody);
                $('#tableID').DataTable();
            });
        }
函数getJsonReport(){ var startDate=$(“#开始日期”).val(); var endDate=$('#end_date').val(); $.get('MonthlyReportAjax',{startDate:startDate,endDate:endDate},函数(responseText){ var tableBody=“”; 对于(var x=0;x 第一次,它工作正常,但若用户再次按下按钮,则会显示错误信息:

无法重新初始化数据表

要检索此表的DataTables对象,请不要传递任何参数或查看Bretrive和bDestroy的文档


如果您打算保留现有的实现,那么以下方法将起作用。您遇到的问题是,错误消息指出:您无法在已有数据表的地方初始化新的
数据表,因此您必须销毁它并重新创建它,如下所示

DataTables API调用是您所需要的

示例(未测试)

$('#submit').on( 'click', function () {
    var table = $('#myTable').dataTable() || false;
    if (table) {
        table.api().destroy();
    }
    getJsonReport(); // Run your update function
});
注意
dataTable
部分。调用
api()
时需要此语法

您的
getJsonReport()
函数将保持不变。实际上,我会在DataTable上使用一个不同的设计模型,该模型本身包含DataTable的所有逻辑,然后专门使用API进行任何更新。这需要重构表的生成方式,所以我不想包含它,但是如果您想了解我对数据表的方法(我已经使用这个库多年了,直到我们使用Angular;),我很乐意提供它


希望这能有所帮助。

下面的代码未经测试,但它应该会向您展示我在上面的评论中所建议的内容,并且需要进行一些调整才能为您工作。它让DataTable完成所有的升降。 它替换getJsonReport,在加载时初始化,并使用go按钮启动数据获取

$(document).ready(function (){
        $("#tableID").DataTable({columns:[{data:"date"}, {data:"newSearch"}, {data:"newSubscribers"}, {data:"pm12"}, {data:"pm3"}, {data:"pm6"}, {data:"newAdds"}],
            deferLoading:0,
            dom""Bt",
            serverSide:true,

            buttons:[{text:"Go", action: function(){
                $("#tableID").DataTable().ajax.reload();
            }}],
            ajax: {type:"get",
                dataSrc:"",
                url:'MonthlyReportAjax',
                data: function () {return {startDate : $('#start_date').val() , endDate : $('#end_date').val()}
                } 
            }
        });

}) 

在java脚本中放入此代码

 $('#idTable').dataTable({
     destroy: true
      });

我们需要在重新初始化之前销毁该表吗?另一个问题是,当第一次加载表时,它没有正确分页。那么,如何做到这一点呢?您能为我提供您的datatable方法吗。示例代码?您正在使用字符串创建表,然后使用DataTable。您应该将数据传递给datatable,让它完成全部工作。我可以提供一个示例使用场景,但使用需要您在呈现页面时创建HTML表,并通过DataTables运行AJAX调用。它还将使用更多的DataTable选项。很遗憾,我不在办公桌旁,但我明天会在这里提供。好的,谢谢。我会等的。