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

时间:2015-09-14 08:48:47

标签: jquery datatables

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

我用命令

刷新表
$('#table1').DataTable().ajax.reload();

我有以下代码

$('#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"),
                        }
                    }
            });

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

aoData.push() 

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

我的jQuery DataTables版本是1.10.7。

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

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

                "data": {
                    'searchType': GetSearchType(),
                    'searchText': GetSearchText()
                }
            },
        "destroy" : true
    }).ajax.reload();

但我收到错误消息:

  

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

     

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

4 个答案:

答案 0 :(得分:26)

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

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

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

如果您不想重新加载表格,请使用$('#table1').DataTable().ajax.reload();如果您不想重置当前页面,请使用$('#table1').DataTable().ajax.reload(null, false)。有关详细信息,请参阅ajax.reload()

答案 1 :(得分:1)

这是我实现的方式:

var onSearchClick = function(){             搜索();         };

    var search = function () {


        var startDate =  $('#datetimepicker1').find("input").val();
        var endDate = $('#datetimepicker2').find("input").val();

        $.ajax({
            type: "GET",
            url: "/api/getByDate?startDate=" + startDate + "&endDate="+endDate,
            datatype: "json",
            traditional: true
        })
        .done(function (data) {

          var table = $('#data-table-1').DataTable({
              data: data.data,
              destroy: true,
              "columns": [
             { "data": "id" },
             { "data": "id2" },
             { "data": "id3" }
              ],
              "columnDefs": [
           {
               "targets": [1],
               "visible": false,
               "searchable": false
           },
            {
                "targets": [2],
                "visible": false,
                "searchable": false
            }],
              "sPaginationType": "full_numbers"
          });
      });
    };

答案 2 :(得分:1)

AJAX第一次在页面加载时将标头作为变量加载。当您更改标题并进行一些排序/搜索时。除非您使用“ beforeSend”设置新标题,否则不会设置新标题。我已提供了示例代码。

尝试一下

$scope.dtOptions = DTOptionsBuilder.newOptions()
.withOption('ajax', {
    url: 'url',
    'beforeSend': function (request) {
        request.setRequestHeader("Authorization","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9");
        request.setRequestHeader("Subscription-Key","1d64412357444dc4abc5fe0c95ead172");
    } ,

    //},
    type: "POST",
    cache: false, // It will not use cache url

})

答案 3 :(得分:1)

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

这是另一种解决方案。将参数添加到默认数据表参数中。

How to set dynamically the Ajax URL of a dataTable?

相关问题