使用新的 aaData 值重新加载数据表

joh*_*lls 3 javascript ajax datatable post json

发送新的 Json 数据时如何刷新数据表


POST请求 接收数据,该数据被发送到LoadTable函数以填充数据表。

function initializeTable(){
	$("#submitbutton").on(
		'click',
		function(){
			$.ajax({
				type : 'POST',
				url : 'rest/log/events',
				data : {
					fromTime : $("#fromTime-filter").val(),
					toTime : $("#toTime-filter").val(),
					Text : $("#search-filter-input").val()	
				},
				
				success : function(data) {
					loadTable(data);
				},
				error : function(jqXHR, textStatus, errorThrown) {
					showAjaxError(jqXHR, textStatus, errorThrown,
						$("#error-msg"));
				}
			});
		});
}
Run Code Online (Sandbox Code Playgroud)


' data ' 被传递给 Load 函数,该函数第一次将数据正确加载到表中。当我第二次提交 POST 请求时,我在浏览器控制台中看到新的“数据”,但数据表刷新

但是当我刷新页面(数据表被清除)然后执行新的 POST 时,新数据会正常加载。我希望加载新数据而不需要刷新页面。

function loadTable(data)
{
	$('#report-table').dataTable( {
		bProcessing : true,
		bJQueryUI : true,
		bLengthChange : false,
		bDestory : true,
		bRetrieve : true,
		bStateSave : true,
		oTableTools: {
			sRowSelect: "multi",
			aButtons: [ "select_all", "select_none" ]
		},
		iDisplayLength : 20,
		"aaData": data,
		"aoColumns": [
			{ "mData" : "date" 	},
			{ "mData" : "name" 		},
			{ "mData" : "type" 			},
			{ "mData" : "section" 		}
		]
	} );
}
Run Code Online (Sandbox Code Playgroud)

TAG*_*ves 5

在我看来,您正在使用 DataTables v1.9。我是这样做的:

function loadTable(data)
{
    var table = $('#report-table');
    if ( ! $.fn.DataTable.fnIsDataTable( table[0] ) ) {
    table.dataTable( {
        bProcessing : true,
        bJQueryUI : true,
        bLengthChange : false,
        bDestory : true,
        bRetrieve : true,
        bStateSave : true,
        oTableTools: {
            sRowSelect: "multi",
            aButtons: [ "select_all", "select_none" ]
        },
        iDisplayLength : 20,
        "aaData": data,
        "aoColumns": [
            { "mData" : "date"  },
            { "mData" : "name"      },
            { "mData" : "type"          },
            { "mData" : "section"       }
        ]
    } );
    } else {
      table.dataTable().fnUpdate(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

另外一个选择:

    function loadTable(data)
    {
        var table = $('#report-table');
        if ( ! $.fn.DataTable.fnIsDataTable( table[0] ) ) {
        table.dataTable( {
            bProcessing : true,
            bJQueryUI : true,
            bLengthChange : false,
            bDestory : true,
            bRetrieve : true,
            bStateSave : true,
            oTableTools: {
                sRowSelect: "multi",
                aButtons: [ "select_all", "select_none" ]
            },
            iDisplayLength : 20,
            "aaData": data,
            "aoColumns": [
                { "mData" : "date"  },
                { "mData" : "name"      },
                { "mData" : "type"          },
                { "mData" : "section"       }
            ]
        } );
        } else {
          table.dataTable().fnDestroy();
          loadTable(data);
        }
    }
Run Code Online (Sandbox Code Playgroud)