使用新参数重新加载Ajax请求

Muf*_*lix 16 jquery datatables

我通过AJAX请求从数据库中获取表数据.我需要在AJAX请求中更改数据参数并刷新表.

我用命令刷新表

$('#table1').DataTable().ajax.reload();
Run Code Online (Sandbox Code Playgroud)

我有以下代码

$('#table1').DataTable({

    /* SERVER SIDE PROCESSING */
                "serverSide": true,
                "ajax":
                    {
                        "url": "Home/Search",
                        "type": "POST",

                        "data": {
                            'searchType': GetSearchType(),
                            'searchText': GetSearchText()
                            //'searchType': $.mynamespace.searchType
                            //'searchText': $.mynamespace.searchText
                            //'searchType': localStorage.getItem("searchType"),
                            //'searchText': localStorage.getItem("searchText"),
                        }
                    }
            });
Run Code Online (Sandbox Code Playgroud)

但是在AJAX重新加载之后,将发送对服务器的原始请求,并忽略新的参数值.我尝试通过函数,全局变量和浏览器存储将数据传递给请求,但没有一种方法可行.在互联网上我找到解决方案

aoData.push() 
Run Code Online (Sandbox Code Playgroud)

功能,但我不知道如何使用它.

我的jQuery DataTables版本是1.10.7.

我还尝试使用以下代码销毁并重新创建表:

$('#table1').DataTable({
        "ajax":
            {
                "url": "Home/Search",
                "type": "POST",

                "data": {
                    'searchType': GetSearchType(),
                    'searchText': GetSearchText()
                }
            },
        "destroy" : true
    }).ajax.reload();
Run Code Online (Sandbox Code Playgroud)

但我收到错误消息:

DataTables警告:table id = table1 - Ajax错误(http://www.datatables.net/manual/tech-notes/7)

参数字典包含非可空类型'System.Int32'的参数'draw'的空条目

Gyr*_*com 33

您可以将函数用作ajax.data选项的值,如下所示.

这样,每次客户端向服务器发出请求时都会运行代码,而不是像初始代码那样运行代码.

$('#table1').DataTable({
   "serverSide": true,
   "ajax": {
      "url": "Home/Search",
      "type": "POST",
      "data": function(d){
         d.searchType = GetSearchType();
         d.searchText = GetSearchText();
      }
   }
});
Run Code Online (Sandbox Code Playgroud)

然后$('#table1').DataTable().ajax.reload()在需要重新加载表格时使用,或者$('#table1').DataTable().ajax.reload(null, false)如果您不想重置当前页面.有关ajax.reload()更多信息,请参阅

  • 谢谢。请注意,上述方法也适用于更新 table.ajax.reload() 调用的参数,而不仅仅是表初始化。即使您使用 jquery(或 javascript)通过 razor 更新表单元素当前内容和/或模型值的参数,也是如此。在 DataTables v1.10+ 中测试,结果良好。:) (2认同)
  • @MichaelFever,确保您使用的是`DataTable()` 而不是`dataTable()`。 (2认同)

小智 9

$('#table1').DataTable().ajax.url("?some_param=1&another=2").load();
Run Code Online (Sandbox Code Playgroud)

这是另一种解决方案。在默认数据表参数中添加您的参数。

如何动态设置dataTable的Ajax URL?

  • 这正是我所需要的!在创建我自己的分页逻辑来控制一次显示的条数记录时,使用此解决方案能够避免执行服务器端处理逻辑(serverSide:true},谢谢! (3认同)

Muf*_*lix 5

好的,我找到了解决方案,在重新初始化表时,需要再次指定所有设置,否则它们将从默认值中获取。所以最终的代码是

$('#table1').DataTable({
            "iDisplayStart": 0,
            "iDisplayLength": 50,
            "bPaginate": true,
            "bSort": false,
            "serverSide": true,
             /* and all others settings others than default */
        "ajax":
            {
                "url": "Home/Search",
                "type": "POST",

                "data": {
                    'searchType': GetSearchType(),
                    'searchText': GetSearchText()
                }
            },
        "destroy" : true  /* <---- this setting reinitialize the table */
    }).
Run Code Online (Sandbox Code Playgroud)

但如果有人找到更好的解决方案,请分享。

  • 也许“destroy”参数在早期版本中有效,但至少在 DataTables 1.10 或更高版本中,它不再有效(因此投了反对票 - 抱歉!)。然而,使用第一个答案中描述的函数确实有效。 (2认同)