【问题标题】:How to use multiple Ajax calls to generate serverside response data?如何使用多个 Ajax 调用来生成服务器端响应数据?
【发布时间】:2016-07-11 16:21:36
【问题描述】:

我有两个不同的 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 文档中,服务器端页面应该在单个查询中返回 totalRecordsdata 进行处理,这不适用于我的情况:

$(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": [...]
}

【问题讨论】:

  • 如果你不能修改第一个来返回第二个的数据,我建议进行第三个 api 调用,结合前两个的结果。

标签: jquery ajax datatables


【解决方案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 的评论让我想到的另一个建议是:你能不能修改一个服务器端响应来调用另一个并立即返回所有数据?这可能是比这更理想的解决方案(尽管仍然低于拥有一个包罗万象的电话)。

【讨论】:

  • 这还能用吗? d.recordsTotal = $.ajax 要求 ajax 同步(并且编码略有不同),或者数据表插件需要知道 recordsTotal 是它应该等待的承诺..
  • @KevinB 我没有想到这一点,这都是非常不标准的(真的应该是一个 ajax 调用)。您可以指定同步发出 ajax 请求(我将添加到示例中)。
猜你喜欢
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 2012-03-24
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多