我正在使用 jquery 数据表来显示记录。我从数据库中获取大约 12000 条记录并将其附加到 html 表,然后将其转换为 jQuery 数据表。
转换为数据表需要很长时间。我等了大约 15 分钟,但桌子仍然没有加载。
任何想法如何解决它?
滞后的主要原因是您尝试在页面上显示的大量 HTML 元素对应于 12000 条记录,唯一的解决方案是尽可能减少它。
不要将记录放在 html 中,通过 JSON 将它们发送到您的页面 - 您可以将其加载为 a<script>
或通过 ajax 或其他...
限制数据表的每页记录。第一次启用分页bPaginate: true
,第二次设置每页记录iDisplayLength: 25
用于yourDataTable.fnAddData(data)
将数据集加载到其中。
已在查询使用的键列上启用了信任索引。此外,尽管将结果附加到 HTML 并转换为 DataTable,我还是建议以下
$('#table_id').DataTable({
ajax: {
url: url_to_data,
dataSrc: "",
contentType: "application/json",
type: "POST",
data : function(d) {
return JSON.stringify({ param1: param1_val, param2: param2_val });
},
},
pageLength: 30,
processing: true,
serverSide: true, //server side processing for larger datasets
columns: [
{ sTitle: "col_1", data: "col_1_field" },
{ sTitle: "col_2", data: "col_2_field" },
],
});
建议pagination
一次只使用和显示几条记录,看看:http ://datatables.net/plug-ins/pagination 。一次显示 12000 条记录,我不认为这真的提供了良好的用户体验。使用 ajax 和分页为每个页面加载数据。
尝试这个..
<script type="text/javascript" src="jquery.dataTables.js"></script>
<script type="text/javascript" src="dataTables.scrollingPagination.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#example').dataTable( {
"sPaginationType": "scrolling",
"bProcessing": true
} );
} );
</script>
这很旧但很有用......我使用以下内容为我的长时间加载数据显示加载 gif。将此与分页结合使用。
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js" type="text/javascript"></script>
<style>
#dvLoading
{
background:#000 url(http://mfgweb.binney.com/manuf/all_data
/img/loader2.gif) no-repeat center center;
height: 100px;
width: 100px;
position: fixed;
z-index: 1000;
left: 50%;
top: 50%;
margin: -25px 0 0 -25px;
}
</style>
<script>
$(window).load(function(){
$('#dvLoading').fadeOut(500);
});
</script>
<div id="dvLoading"></div>
加载需要时间,因为会有两次迭代——一次迭代并加载 HTML 中的内容,另一次用它制作数据表。而是使用如下参数直接从服务器加载数据表:
"sAjaxSource": '#yourServerCallHereWhichReturnsJSON#',
"fnServerData": fnServerObjectToArray(aPublicationElements),
这里的“aPublicationElements”是一个包含 JSON 元素的变量,如下所示:
var aPublicationElements = ['jsonParameter1','jsonParameter2','jsonParameter3','jsonParameter4'];
并在参数中渲染这些数据,如下所示:
"aoColumns": [
{"sTitle":"Title1",
"render": function(data, type, oObj) {
return oObj[0];
}
},
{"sTitle":"Title2",
"render": function(data, type, oObj) {
return oObj[1];
}
},
{"sTitle":"Title3",
"render": function(data, type, oObj) {
return oObj[2];
}
},
{"sTitle":"Title4",
"render": function(data, type, oObj){
return oObj[3];
}
}
}
],
函数“fnServerObjectToArray”类似于将服务器对象转换为数组:
fnServerObjectToArray = function ( aElements ){
return function ( sSource, aoData, fnCallback ) {
$.ajax({
"dataType": 'json',
"type": "POST",
"url": sSource,
"data": aoData,
"success": function (json) {
var a = [];
for ( var i=0, iLen=json.length ; i<iLen ; i++ ) {
var inner = [];
for ( var j=0, jLen=aElements.length ; j<jLen ; j++ ) {
inner.push( json[i][aElements[j]] );
}
a.push( inner );
}
json.aaData = a;
fnCallback(json);
}
});
}
};
希望这可以帮助。
试试 Datatable ServerSide... 按照这个链接