jQuery DataTable - «Обработка» не появляется - PullRequest
0 голосов
/ 05 мая 2018

У меня проблема с отображением сообщения обработки в таблице данных jQuery. Я искал эту проблему и следовал всем предложениям безрезультатно. Только одно предложение работает, но частично.

Я пытался:

var tblFacCert = $("#tblFacCert").on('processing.dt', function (e, settings, processing) {
    if (processing) {
        if ($('#imgLoad').length == 0)
            $(this).prepend('<img id="imgLoad" src="../assets/images/PleaseWait.gif" alt="" />');
    }
    else
        $('#imgLoad').remove();
}).DataTable({
    dom: 'lfrtip',
    processing: true,
    ....
}),

Также:

<style type="text/css">
    #tblFacCert_processing {
        top: 64px !important;
        z-index: 11000 !important;
        visibility:visible;
        background-image:url("../assets/images/PleaseWait.gif"); background-repeat:no-repeat;
    }
</style>

Это частично работает. Он показывает слово «Обрабатывается ...», но не исчезнет, ​​когда таблица заполнится. Кроме того, он отображается при обратной передаче страницы, как при выборе в раскрывающемся списке, возможно потому, что я перерисовываю при обратной передаче.

"preDrawCallback": function () {
    $('.dataTables_processing').attr('style', padding-bottom: 60px; display: block; z-index: 10000 !important');
},

Обновление - после добавления serverSide: true

Я изначально добавил «serverSide: true» в определение таблицы данных, но удалил его после получения этой ошибки: «Необработанное исключение в строке 36, столбец 442 в https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js 0x800a138f - Ошибка времени выполнения JavaScript: невозможно установить свойство 'data' с неопределенной или нулевой ссылкой ".

У меня есть две таблицы данных на странице, они заполняются при нажатии кнопки «Отправить». Вот как я их настраиваю и заполняю (для краткости я включаю только одну таблицу данных)

var tblFacCert = $("#tblFacCert").DataTable({
    jQueryUI: true,
    "serverSide": true, // This causes error
    data: [],
    dom: 'lfrtip',
    processing: true,
    stateSave: true,
    "lengthMenu": [[15, 25, 50, -1], [15, 25, 50, "All"]],
    order: [[0, "asc"], [1, "asc"], [2, "asc"], [3, "asc"]],

    "columns": [
        {
            "data": "Area"
        }, {
            "data": "District"
        }, { ... more columns ...}
    ],
    "columnDefs": [ ...
    ],
    "pageLength": 15,
    deferRender: true,
    scrollCollapse: true,
    scroller: true,
    "preDrawCallback": function () {
        $('#tblFacCert_processing').attr('style', 'padding-bottom: 60px; display: block; z-index: 10000 !important');
    },
    "rowCallback": function (row, data, index) {
        ...
    }
});

// Get data for both data tables and populate
$("#btnSubmit").on("click", function (event) {
    var facCertUrl = "../services/easg.asmx/GetComplianceReportData";
    var facCertParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
    var statsUrl = "../services/easg.asmx/GetFacComplianceByArea";
    var statsParams = "{ 'startDate': '" + $("#tbStartDate").val() + "', 'certID': '" + $('#ddlCertificate').val() + "'}";
    populteTable(statsUrl, statsParams, tblStats);
    populteTable(facCertUrl, facCertParams, tblFacCert);
})

function populteTable(ws_url, parameters, table) {
    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json; charset=utf-8",
        url: ws_url,
        cache: false,
        data: parameters,
    }).done(function (result) {
        table.clear().draw();
        table.processing = true;
        jResult = JSON.parse(result.d);
        table.rows.add(jResult).draw();
    }).fail(function (jqXHR, textStatus, errorThrown) {
        alert(textStatus + ' - ' + errorThrown);
    });
}

1 Ответ

0 голосов
/ 05 мая 2018

Сообщение обработки будет отображаться, только если у вас включена обработка на стороне сервера. В примере здесь вы увидите, что он кратковременно всплывает, но только на короткое время, поскольку набор данных мал, обработка занимает мало времени.

    var dt = $('#example').DataTable( {
    "processing": true,
    "serverSide": true,
    "ajax": "/ssp/objects.php",
    "columns": [
        { "data": "first_name" },
        { "data": "last_name" },
        { "data": "position" },
        { "data": "office" },
        { "data": "start_date" },
        { "data": "salary" }
    ]
} ); 

Если это не решит его для вас и не отобразит сообщение об обработке, стоило бы вставить весь код инициализации вашей таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...