Quantcast
Channel: Recent Discussions — DataTables forums
Viewing all articles
Browse latest Browse all 82579

Reload/Refresh data on button click and keep position on page with 100 rows

$
0
0

I'm trying to reload the table by keeping the position after scrolling, paging and sorting after refresh (without the user to notice that the table refreshed) but I can't seem to find a way to even call the reload function correctly. I'm getting the data from a separate function and after that I'm building the datatable but at some point I need to refresh it by getting again the data and reload the table.

//get data
function GetData(sid, isNew) {
    $.ajax({
        async: true,
        cache: true,
        type: "POST",
        data: JSON.stringify({ action: "getTableInfo"}),
        url: "/api/MyController",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (data) {
            var trtrtr = 0;
            if (data.length == 0) {
                new PNotify({
                    title: "Sticky PNotify",
                    type: "error",
                    text: "Sorry... There are no data for this site.",
                    styling: 'bootstrap3',
                });
            }
                document.pvm.tableContent(data);
                if (isNew == 1) {
                    if (table != null) table.destroy();
                    init_DataTables();
                }
                else
                    $('#datatable-buttons').DataTable().ajax.reload();
            }
        },
        error: function (xhr) {
            var trtrtrtr = 0;
            if (typeof (PNotify) === 'undefined') { return; }
            console.log('init_PNotify');
            new PNotify({
                title: "Sticky PNotify",
                type: "error",
                text: "Sorry... Something went wrong.",
                styling: 'bootstrap3'
            });
        }
    });
}

function init_DataTables() {

    console.log('run_datatables');

    if (typeof ($.fn.DataTable) === 'undefined') { return; }
    console.log('init_DataTables');

    var handleDataTableButtons = function () {
        if ($("#datatable-buttons").length) {
            table = $("#datatable-buttons").DataTable({
                data: document.pvm.tableContent(),
                ajax: document.pvm.tableContent(),
                deferRender: true,
                columns: [
                { data: "DeviceId", title: "Device" },
                { data: "TimeRemaining", title: "Time remaining" },
                { data: "ExternalVoltage", title: "Vin" },
                { data: "Cell1", title: "Cell1 V" },
                { data: "Cell2", title: "Cell2 V" },
                { data: "BatteryPercent", title: "Battery" },
                { data: "Temperature", title: "Temperature" },
                { data: "WiFi", title: "WiFi" },
                { data: "GSM", title: "GSM" },
                { data: "TimeRemaining2", title: "Pass/Fail" },
                ],
                fixedHeader: true,
                "bAutoWidth": false,
                "lengthMenu": [[10, 20, 100, 200], [10, 20, 100, 50]],
                "iDisplayLength": 100,
                dom: "lfrtiBp",
                "bAutoWidth": false,
                buttons: [
                  {
                      extend: "copy",
                      className: "btn-sm"
                  },
                  {
                      extend: "csv",
                      className: "btn-sm"
                  },
                  {
                      extend: "excel",
                      className: "btn-sm",
                      filename: "ShieldBurninSetup"
                  },
                  {
                      extend: "pdf",
                      className: "btn-sm"
                  },
                  {
                      extend: "print",
                      className: "btn-sm"
                  },
                ],
                "order": [[0, "asc"]],
                "columnDefs": [
                {
                    "targets": 9,
                    "render": function (data, type, full, meta) {
                        // If it is rendering the cell contents
                        if (type === 'display') {
                                if(data == 0)
                                    return '<div style="text-align:left"><button type="button" class="btn btn-danger" onClick="Fail(' + full.DeviceId + ')">Fail</button><button type="button" class="btn btn-success" onClick="Success(' + full.DeviceId + ')">Pass</button></div>';
                                else
                                    return '<div style="text-align:left"><button type="button" class="btn btn-danger" onClick="Fail(' + full.DeviceId + ')">Fail</button></div>';

                            }
                        return (isNaN(data)) ? -1 : +data;
                    }
                }]
            });

        }
    };

    TableManageButtons = function () {
        "use strict";
        return {
            init: function () {
                handleDataTableButtons();

            }
        };
    }();

    TableManageButtons.init();
};

function Fail(id) {
    GetData(document.pvm.siteIdSelected(), 0);
}


function Pass(id) {
    trtrtr = 0;
}

On first load I get the error: Datatables warning: table id=datatable-buttons - Invalid JSON response. For more information about this error, please see https://datatables.net/tn/1. For reload on button click (Fail one) I've tried using $('#datatable-buttons').DataTable().ajax.reload(); or table.ajax.reload(); but I get the same error.

document.pvm.tableContent() is an Knockout observable array that I'm using to store the received data in it.

It's my first time trying to reload the datatable and I don't know how to refresh in a nice way that does not re-build the table and destroy the sort ordering. What am I doing wrong?


Viewing all articles
Browse latest Browse all 82579

Latest Images

Trending Articles



Latest Images

<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>