【发布时间】:2012-03-25 10:20:18
【问题描述】:
我有一个页面正在初始化一个空数据表,并在从选择中更改 jquery 后使用 $.getJSON() 获取 json 数据。然后使用 .fnAddData 添加到表中。像这样:
oTableDisk = $('#disk_connection_table').dataTable({
"bJQueryUI": true,
"iDisplayLength": 30,
"oLanguage": {
"sLengthMenu": tableLength
},
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull){
$(nRow).attr('id', aData[0] + "|<?php echo $this->hostInfo['name']; ?>|<?php echo $this->hostInfo['id']; ?>");
return nRow;
},
"aoColumns": [{"bSearchable": false, "bVisible": false}, null, null, null, null, null, null]
});
$('#disk_switch').change(function(){
$.getJSON('/host/getavailableports?type=disk&switch=' + $('#disk_switch option:selected').val(), function(data){
if(data[0]){
data.reverse();
oTableDisk.fnClearTable();
$.each(data, function(index){
//console.log(data[index]);
oTableDisk.fnAddData([data[index]['Item1'],
data[index]['Item2'],
data[index]['Item3'],
data[index]['Item4'],
data[index]['Item5'],
data[index]['Item6'],
data[index]['Item8']]);
});
enableEditable(oTableDisk);
}
});
});
在我们需要处理超过 500 行信息之前,这一直运行良好,并导致 IE 出现“脚本已变得无响应”错误。
现在,我根本没有初始化一个空数据表,而是在选择菜单发生如下变化时创建一个:
$('#disk_switch').change(function(){
oTableDisk = $('#disk_connection_table').dataTable({
"bJQueryUI": true,
"iDisplayLength": 30,
"bProcessing": true,
"bServerSide": true,
"bDestroy": true,
"sAjaxSource": '/host/getavailableports?type=disk&switch=' + $('#disk_switch option:selected').val(),
"aaSorting": [[0, "asc"]],
"oLanguage": {
"sLengthMenu": tableLength
},
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull){
$(nRow).attr('id', aData[0] + "|<?php echo $this->hostInfo['name']; ?>|<?php echo $this->hostInfo['id']; ?>");
return nRow;
},
"aoColumns": [{"bSearchable": false, "bVisible": false}, null, null, null, null, null, null],
"fnDrawCallback": function() {
$( oTableDisk.fnGetNodes() ).click( function () {
enableEditable(oTableDisk);
} );
}
});
在重写控制器和模型以支持带有限制、位置和 orderby 参数的查询后,我正在获取数据,并且似乎我的 JSON 对象格式正确。问题是现在我没有分页功能。或排序功能。该表将分页箭头显示为灰色,单击列标题实际上并没有做任何事情。在分页链接上方显示“显示 30 个条目中的 1 到 30 个(从 483 个总条目中过滤)”,这对于查询是正确的。
我认为这与加载页面后加载表格有关,但我不知道如何修复它。
【问题讨论】:
-
使用浏览器控制台分析返回,应该有一个起点,如果是可靠有效的json,听起来就像服务器每次发送相同的数据
-
所以事实证明我不需要将其切换到服务器端处理。我通过在数据之后将“false”标志添加到 oTableDisk.fnAddData 函数来修复它。然后在加载数据后调用 oTableDisk.fnDraw 函数。另一种方法是在加载每条数据后重新绘制表格。
标签: javascript jquery datatables