DataTables服务器端处理URL太长

时间:2015-11-23 01:32:50

标签: datatables

有没有办法阻止它将所有列发送到服务器?

目前,AJAX请求如下:

  ?

ssp.php绘制= 2及列%5B0%5D%5Bdata%5D = ID&安培;柱%5B0%5D%5Bname%5D =安培;为了%5B0%5D%5Bcolumn%5D = 10&安培;为了%5B0 %5D%5Bdir%5D = ASC&安培;开始= 0&安培;长度= 10安培;搜索%5Bvalue%5D =安培;搜索%5Bregex%5D =假安培; _ = 1448240832750

但它的长度为5689个字符。我正在寻找一种方法来禁用所有不必要的列数据。这可能吗?

5 个答案:

答案 0 :(得分:13)

您可以通过POST发送它,因此这些字段都不会出现在发送到您服务器的URL上。以下是docs

中的一个示例
$(document).ready(function() {
    $('#example').DataTable( {
        "serverSide": true,
        "ajax": {
            "url": "scripts/post.php",
            "type": "POST"
        },
    };
});

答案 1 :(得分:3)

如果您使用GET尝试删除不必要的列。

$('#your-table').DataTable({
  serverSide: true,
  processing: true,
  ajax: {
    url: 'url-here',
    data: function (data) {
      for (var i = 0, len = data.columns.length; i < len; i++) {
        if (! data.columns[i].search.value) delete data.columns[i].search;
        if (data.columns[i].searchable === true) delete data.columns[i].searchable;
        if (data.columns[i].orderable === true) delete data.columns[i].orderable;
        if (data.columns[i].data === data.columns[i].name) delete data.columns[i].name;
      }
      delete data.search.regex;
    }
  }
})

答案 2 :(得分:2)

使用可以抑制不必要的参数,例如下面的方式:

"ajax":{
        url :"admin/customers/ajax_datatables",
        type: "get",
        data: function ( data) {
            delete data.columns; // <-- too long and not neccessary if you don't use

            //and you can add more data
            data.form_search_params = $("#frm_search").serializeFormJSON();
        },
        error: function (xhr, error, thrown) {
            console.log(xhr);
        }
    },

答案 3 :(得分:1)

https://datatables.net/examples/server_side/post.html 解决方案是使用post而不是GET

答案 4 :(得分:1)

使用delete删除您不想发送的字段。如下:

"ajax": {
            "url": "yoururl",
            "data": function (d) {
                for (var i = 0, len = data.columns.length; i < len; i++) {
                    delete data.columns[i];
                }
                delete data.search.regex;
                return $.extend({}, d, {
                    "filterOne": $('#mydropdown').val(),
                });

            },
            "type": "GET",
        },