how can I trigger jquery datatables fnServerData to update a table via AJAX when I click a button?

前端 未结 7 955
陌清茗
陌清茗 2020-12-28 17:15

I\'m using the datatables plugin with server-side data and am updating the table using AJAX.

My dataTables setup looks like this:

tblOrders = parame         


        
7条回答
  •  再見小時候
    2020-12-28 17:43

    I found this script some time ago (so I don't remember where it came from :( and who to credit for it :'( ) but here :

    $.fn.dataTableExt.oApi.fnReloadAjax = function (oSettings, sNewSource, fnCallback, bStandingRedraw) {
        if (typeof sNewSource != 'undefined' && sNewSource != null) {
            oSettings.sAjaxSource = sNewSource;
        }
        this.oApi._fnProcessingDisplay(oSettings, true);
        var that = this;
        var iStart = oSettings._iDisplayStart;
        var aData = [];
    
        this.oApi._fnServerParams(oSettings, aData);
    
        oSettings.fnServerData(oSettings.sAjaxSource, aData, function (json) {
            /* Clear the old information from the table */
            that.oApi._fnClearTable(oSettings);
    
            /* Got the data - add it to the table */
            var aData = (oSettings.sAjaxDataProp !== "") ?
                that.oApi._fnGetObjectDataFn(oSettings.sAjaxDataProp)(json) : json;
    
            for (var i = 0; i < aData.length; i++) {
                that.oApi._fnAddData(oSettings, aData[i]);
            }
    
            oSettings.aiDisplay = oSettings.aiDisplayMaster.slice();
            that.fnDraw();
    
            if (typeof bStandingRedraw != 'undefined' && bStandingRedraw === true) {
                oSettings._iDisplayStart = iStart;
                that.fnDraw(false);
            }
    
            that.oApi._fnProcessingDisplay(oSettings, false);
    
            /* Callback user function - for event handlers etc */
            if (typeof fnCallback == 'function' && fnCallback != null) {
                fnCallback(oSettings);
            }
        }, oSettings);
    }
    

    Add that BEFORE you call the datatable initialization function. then you can just call the reload like this:

    $("#userFilter").on("change", function () {
            oTable.fnReloadAjax(); // In your case this would be 'tblOrders.fnReloadAjax();'
        });
    

    userFilter is an ID for a dropdown, so when it changes, it reloads the data for the table. I just added this as an example but you can trigger it on any event.

提交回复
热议问题