【发布时间】:2018-05-05 05:27:04
【问题描述】:
我在 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>
这部分有效。它显示单词“Processing ...”,但在填充表格时不会消失。此外,它会显示在页面回发上,就像在下拉列表中进行选择一样,大概是因为我正在回发上重绘。
"preDrawCallback": function () {
$('.dataTables_processing').attr('style', padding-bottom: 60px; display: block; z-index: 10000 !important');
},
更新 - 添加 serverSide:true 后
我最初在数据表定义中添加了“serverSide: true”,但在收到此错误后将其删除:“https://cdn.datatables.net/1.10.16/js/jquery.dataTables.min.js 中第 36 行第 442 列的未处理异常@ 0x800a138f - JavaScript 运行时错误:无法设置未定义或空引用的属性“数据”。
我在页面上有两个数据表,单击“提交”按钮时会填充它们。这就是我设置和填充它们的方式(为了简洁,我只包含一个数据表)
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);
});
}
【问题讨论】:
-
你的进程在
server-side吗?它基本上可以在服务器端工作。但如果是在client-side,我想你得做一个自定义processing -
@Drenyl 我将它作为数据表定义的一部分但已删除。请查看我的更新。
-
请注意,
server side processing表示datatable正在根据需要向服务器发送参数,例如draw、start、length。它期望返回的数据如recordstotal、data等datatables.net/manual/server-side
标签: javascript jquery datatables