我有两个不同的Ajax查询(如下所示),它们提供了DataTables所需的服务器端数据的不同部分。
// for each page, returns 40 rows of records as json string from table
ajax.aspx?get=list&page=1
// returns total count for the table
ajax.aspx?get=count
如何将这两个ajax调用返回的数据合并到DataTables jQuery插件所需的一个JSON数据集中?
从DataTables文档中,服务器端页面应该返回totalRecords
&在单个查询中进行处理的data
,对我的案例不起作用:
$(document).ready(function() {
$('#example').DataTable( {
"processing": true,
"serverSide": true,
"ajax": "scripts/server_processing.php"
} );
} );
// ajax result for server_processing.php:
{
"draw": 1,
"recordsTotal": 57,
"recordsFiltered": 57,
"data": [...]
}
答案 0 :(得分:1)
我的第一个建议是将这两个服务器端响应与Ajax调用合并为一个返回所有必需数据的响应,如DataTables server-side documentation中所建议的那样。如果这不是一个选项,我可以想到的解决方法是在第一个成功回调函数中进行第二次Ajax调用,然后将两个JSON文件拼接在一起。
这可能听起来很丑陋(而且确实如此),这就是为什么尽可能将两个Ajax调用结合起来是有利的。
快速模拟看起来像是:
$('#example').DataTable( {
"processing": true,
"serverSide": true,
"ajax": {
"url": "scripts/server_processing.php",
"data": function ( d ) {
d.recordsTotal = $.ajax({
"url": "ExampleURL.php",
"dataType": "json",
"async": false //Necessary, see @KevinB's comment
//Other configuration options (link below)
}).count; //or whatever object you need from this call
}
}
} );
可以找到jQuery Ajax调用的其他配置选项here。
同样,我想强调使用两个Ajax调用是不幸的,理想情况下,您可以在单个Ajax调用中处理所有数据。
修改强> @Kevin B的评论让我想到的另一个建议是:你能否修改一个服务器端响应来调用另一个并立即返回所有数据?这可能是一个比这个更优化的解决方案(尽管仍然只有一个无所不包的呼叫)。