我通过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'
答案 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();
这是另一种解决方案。将参数添加到默认数据表参数中。