空ajax响应的数据表错误

时间:2013-03-16 08:22:00

标签: ajax datatable

我在我的项目中使用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']]
} );

4 个答案:

答案 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: '' }
],