【问题标题】:DataTables read ajax response with your own parametersDataTables 使用您自己的参数读取 ajax 响应
【发布时间】:2017-12-02 23:35:45
【问题描述】:

在服务器端模式下使用 DataTables 1.10.15。我创建了一个 PHP 脚本来提供 JSON 响应,其中包括他们在文档中提到的参数:https://datatables.net/manual/server-side#Returned-data

我想将自己的参数添加到 JSON 响应中,例如

$response = [
    'data' => [ ], // Required by DataTables 
    'form_errors' => [ ] // Not required by DataTables
];
echo json_encode($response);

我的 ajax 调用的 js 看起来像这样:

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
});

如何读取 ajax 响应?我在 API 中看到有一个 .on('xhr') 方法 (https://datatables.net/reference/event/xhr) 在 ajax 请求完成时触发,例如

var myTable = $('#myTable').DataTable( {
    "serverSide": true,
    "ajax": { 
        "url" : "/response.php",
        "method" : "POST"
    },
}).on( 'xhr.dt', function () {
    // Read response here?
});

但当时我找不到读取 ajax 响应数据的方法。

有人知道这是否可行吗?

【问题讨论】:

    标签: jquery ajax datatables


    【解决方案1】:

    老问题,但我会尝试回答未来可能需要的问题,因为我有完全相同的问题,在查找他们的文档后我找到了drawCallback

    来自您的代码:

    var myTable = $('#myTable').DataTable( {
        "serverSide": true,
        "ajax": { 
            "url" : "/response.php",
            "method" : "POST"
        },
        "drawCallback": function (settings) { 
            // Here the response
            var response = settings.json;
            console.log(response);
        },
    });
    

    【讨论】:

    • 这是真正的解决方案
    • 这是正确的。就像我几年前发布的那样重新阅读这篇文章,但这确实是我使用的解决方案。
    • 有了这个答案,我可以看到返回的数据正在小写我的属性名称。即“名称”>“名称”。一旦我切换了我的 DataTable 列属性以使用正确的大小写,它就起作用了。谢谢
    【解决方案2】:

    你可以这样做,在初始化代码块之后:

    myTable.on('xhr', function () {
            var json = oTable.ajax.json();
            if (json) {
                 // read the json here: json.form_errors
             }
    });
    

    【讨论】:

      【解决方案3】:

      这应该是 DataTable 的 ajax 属性

      "dataSrc": function(json) {
      if (json.CustomVariable) {
          $("#some_span").html(json.CustomVariable);
      }
      // You can also modify `json.data` if required
      return json.data;
      

      根据相关代码的完整示例可以是

      var myTable = $('#myTable').DataTable({
                  "serverSide": true,
                  "ajax": {
                      "url": "/response.php",
                      "method": "POST",
                      "dataSrc": function(json) {
                          if (json.CustomVariable) {
                              $("#some_span").html(json.CustomVariable);
                          }
                          // You can also modify `json.data` if required
                          return json.data;
                      },
                  });
      

      参考DataTables > Return custom variables from server side to datatables ajax call

      【讨论】:

        【解决方案4】:

        你应该实现dataFilter函数:

        var myTable = $('#myTable').DataTable( {
            "serverSide": true,
            "ajax": {
                "url" : "/response.php",
                "method" : "POST",
                dataFilter: function (data) {
                    data = jQuery.parseJSON(data);
        
                    return JSON.stringify(data.data.original);
                }.bind(this)
            }
        });
        

        【讨论】:

          【解决方案5】:

          您可以使用这样的 ajax 回调方法读取响应:

          var myTable = $('#myTable').DataTable( {
              "serverSide": true,
              "ajax": { 
                  "url" : "/response.php",
                  "method" : "POST"
              },
              success: function(data) {
                // Request success
                console.log(data);       
              },
              error: function(data) {
                // Request failed
                console.log(data);
              }
          });
          

          希望对你有帮助!

          【讨论】:

          猜你喜欢
          • 2019-08-18
          • 1970-01-01
          • 2017-01-21
          • 2023-04-11
          • 1970-01-01
          • 2013-08-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多