如何使用新参数更新数据表

时间:2017-10-07 20:19:44

标签: javascript jquery html datatable datatables

我正在使用带有服务器端处理的数据表。我试图根据一些参数过滤表,但我无法将新的参数发送到服务器。数据表总是使用旧的参数

这就是我所拥有的

oTable = $('#mainDataTable').DataTable( {
        paging:         true,
        searching:      false,
        scrollY:        docHeight,
        //scrollX:      300,
        stateSave:      false,
        info:           true,
        "bServerSide" : true,
        "sAjaxSource" : "http://myurl/"+getParameters(); //start=1&end=50&foo=bar",
        "fnServerData": function (sSource, aoData, fnCallback) {
                $.ajax({
                    type: "GET",
                    cache: false, // do not cache
                    url: sSource,
                    data: aoData,
                    success: function (json) {
                        fnCallback(json);
                    }
                });
        },
        "iDisplayLength": 25,

我尝试通过调用draw(false)更新参数,但它将旧参数发送到服务器。我还尝试table.ajax.url( url ).load()再次发送旧参数。

我浏览了datatables.net并找到了一些例子,如下面的

oTable = $('#mainDataTable').DataTable( {
        paging:         true,
        searching:      false,
        scrollY:        docHeight,
        //scrollX:      300,
        stateSave:      false,
        info:           true,
        "bServerSide" : true,
        "sAjaxSource" : "http://myurl/"+getParameters(),
        "fnServerData": function (sSource, aoData, fnCallback) {
                $.ajax({
                    type: "GET",
                    cache: false, // do not cache
                    url: sSource,
                    data: {
                        "start": $("#start").val();
                        "end":  $("input[name=end]").val(); 
                        "foo":  $("input[name=bar]").val();
                    },
                    success: function (json) {
                        fnCallback(json);
                    }
                });
        },

似乎有效,但现在我的服务器没有被传递iDisplayStartiDisplayLength等我依赖它进行分页

知道我做错了吗?

3 个答案:

答案 0 :(得分:0)

你应该使用函数而不是变量,它应该是:

 function getPostData(tableParams) {
        return  $.param(tableParams) + "&" + $.param({
                ID:$('#Id').val()
            });
    }

然后:

ajax: {
            url:proxyPath + modulePath +'getList',
            data: getPostData
        },

你可以使用它,享受

答案 1 :(得分:0)

也许这个例子可以帮助你...

在jQuery中,每次select输入改变值时,它都会使用POST获取JSON数据,这里定义的参数是select的值,你也可以使用POST命令传递其他参数(在我的例子中是"密钥&#34):

$('select').change(function() {
    var table = $('#mainDataTable').DataTable();
    table.clear().draw();
    $.post('scripts/fetch-some-data.php', {
        key: $('select').val()
    }, function(data) {
        table.rows.add(data).draw();
    }, 'json');
});

答案 2 :(得分:0)

你走在正确的轨道上...在服务器端代码中捕获新的参数如。

       public ActionResult 
       Get([ModelBinder(typeof(DataTablesBinder))] 
       IDataTablesRequest requestModel, string start, string end, string foo)
       {//all Code here  }