我在我的项目中使用Datatable 1.9.2。我通过AJAX显示申请人名单。还有一个过滤器表单,用于过滤数据。一切都运行正常,但问题是如果我过滤记录并且DB没有返回任何数据,那么datatable会在POPUP中生成错误。有人可以指导我如何使用datatable处理空的ajax响应,如何处理空数据集。
以下是我正在使用的代码
$('#applicants_list').dataTable( {
"bProcessing": true,
"bServerSide": true,
"sPaginationType": "bootstrap",
"sDom": '<"H"Cfr>t<"F"ip>',
"oColVis": {
"activate": "mouseover",
"aiExclude": [ 10 ],
"sAlign": "left"
},
"bFilter": false,
"sAjaxSource": script.php,
"aoColumns": [
{"bSortable": true }, // attachments
{"bSortable": true }, //Subject Line
{"bSortable": true }, // Date Sent
{"bSortable": true }, // File Name
{"bSortable": false },
{"bSortable": false },
{"bSortable": true },
{"bSortable": true },
{"bSortable": true },
{"bSortable": false }
],
"aaSorting": [[0, 'desc']]
} );
答案 0 :(得分:5)
当过滤器返回记录为空时,只需从server / ajax响应返回以下数据,它将显示空记录消息。
echo '{
"sEcho": 1,
"iTotalRecords": "0",
"iTotalDisplayRecords": "0",
"aaData": []
}';
答案 1 :(得分:3)
echo json_encode(array('aaData'=>''));
适合我。
答案 2 :(得分:1)
对于那些寻找ASP.NET解决方案的人来说,这是一个使用JSON.NET的例子:
JObject jObj = new JObject(
new JProperty("draw", 0),
new JProperty("recordsTotal", 0),
new JProperty("recordsFiltered", 0),
new JProperty("data", new JArray())
);
return Content(jObj.ToString(Formatting.None), "application/json");
此处其他答案中的参数适用于DataTables的旧版本,我认为它仍然可能向后兼容,至少aaData是从我在代码中看到的处理的。
答案 3 :(得分:1)
尝试对每个列对象使用defaultContent属性...
PD:没有必要使用双引号
columns: [
{bSortable: true, defaultContent: '' }, // attachments
{bSortable: true, defaultContent: '' }, //Subject Line
{bSortable: true, defaultContent: '' }, // Date Sent
{bSortable: true, defaultContent: '' }, // File Name
{bSortable: false, defaultContent: '' },
{bSortable: false, defaultContent: '' },
{bSortable: true, defaultContent: '' },
{bSortable: true, defaultContent: '' },
{bSortable: true, defaultContent: '' },
{bSortable: false, defaultContent: '' }
],