如何使用多个Ajax调用生成服务器端响应数据?

时间:2016-07-11 16:21:36

标签: jquery ajax datatables

我有两个不同的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": [...]
}

1 个答案:

答案 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的评论让我想到的另一个建议是:你能否修改一个服务器端响应来调用另一个并立即返回所有数据?这可能是一个比这个更优化的解决方案(尽管仍然只有一个无所不包的呼叫)。