我使用 JQuery 数据表。我在ajax成功时将数据发送到json文件中的数据表onclick。第一次单击一切都很好,但下一次单击我只得到正确的数据和dataTables_info的错误值,它始终显示dataTables_info的第一个值并且分页和行也来自第一个结果。 这是数据表中数据的第一次显示:
接下来的所有点击我只得到正确的数据: 对于这个例子,它们是下图中显示的一个结果,但其他所有内容(信息、显示、分页)都属于第一张图片中显示的第一个搜索:
在第二个示例中,当我单击分页的任何页面时,我都会得到第一页结果的内容! 这是我的函数ONclick:
$ ( '#ButtonPostJson' ).on('click',function() {
$("tbody").empty();
var forsearch = $("#searchItem").val();
$.ajax({
processing: true,
serverSide: true,
type: 'post',
url: 'searchData.json',
dataType: "json",
data: mysearch,
/* bRetrieve : true,*/
success: function(data) {
$.each(data, function(i, data) {
var body = "<tr>";
body += "<td>" + data.name + "</td>";
..........................
..........................
body += "</tr>";
$('.datatable-ajax-source table').append(body);
})
;
/*DataTables instantiation.*/
$('.datatable-ajax-source table').dataTable();
},
error: function() {
alert('Processus Echoué!');
},
afterSend: function(){
$('.datatable-ajax-source table').dataTable().reload();
/* $('.datatable-ajax-source table').dataTable({bRetrieve : true}).fnDestroy();
$(this).parents().remove();
$('.datatable-ajax-source table').dataTable().clear();*/
}
});
});
我尝试了一切,但我不知道我错过了什么。 我使用这个 jquery 作为数据表:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.2/jquery-ui.min.js"></script>
谢谢。
像这样使用
$('#product_table').DataTable().ajax.reload();
先获取表id,如:
var table=('#tableid').Datatable();
table.draw();
只需将这些行放在ajax
success
函数之后即可重新加载数据表
单击按钮时,您不需要清空表格主体并使用 ajax 再次启动数据表。
您只需再次调用 ajax,因为您已经启动了文档就绪功能。
只需使用:
$("#Table_id").ajax.reload();
查看以下链接,您会有更好的想法。
我也遇到了同样的问题。我发现我在一个项目中编写的一个函数可以处理这个问题。这是我制作的一个简单的 2 列表。
<table id="memberships" class="table table-striped table-bordered table-hover" width="100%">
<thead>
<tr>
<th>Member Name</th>
<th>Location</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Member Name</th>
<th>Location</th>
</tr>
</tfoot>
</table>
这是我填充它的脚本:
function drawTable(){
var table = $('#memberships').DataTable();
table.destroy();
value = $("#memberName").val();
console.log("member name-->>" + value);
$('#memberships').DataTable({
responsive:true,
pageLength: 50,
ajax:{
"url": `//BACKEND API CALL`,
"type":"get",
"dataSrc": 'members'//my data is in an array called members
},
columns: [
{"data": "name_display" },
{"targets": 0,
"data": "membershipID",
"render": function ( data, type, full, meta ) {
return '<button type="button" class="btn btn-info btn-block"
onclick="editMember(' + data + ')">Edit Member</button><button
type="button" class="btn btn-danger btn-block"
onclick="deleteMember(' + data + ')">Delete</button>';
}
}
]
});
$.fn.dataTable.ext.errMode = 'none';
}
你可以忽略我的列渲染功能。根据返回的数据,我需要 2 个按钮。关键是函数中的table.destroy。我在名为 table 的变量中创建了该表。我在初始化时销毁了它,因为它允许我一遍又一遍地使用相同的函数。第一次它破坏了一个空表。此后的每次调用都会销毁数据并从 ajax 调用中重新填充数据。
希望这有帮助。
更新:在多次使用数据表之后,我发现将表设置为函数的全局范围内的变量允许您使用重新加载。
var table = $('#memberships').DataTable({});
然后
table.ajax.reload();
应该可以。
我创建了这个简单的函数:
function refreshTable() {
$('.dataTable').each(function() {
dt = $(this).dataTable();
dt.fnDraw();
})
}
使用下面的代码..它完美工作,它可以保持分页而不会丢失当前页面
$("#table-example").DataTable().ajax.reload(null, false );
$('.table').DataTable().ajax.reload(); 这对我有用..
$("#Table_id").ajax.reload();
不起作用。
我实现了 -
var mytbl = $("#Table_id").datatable();
mytbl.ajax.reload;
.reload() 在我们传递一些参数之前无法正常工作
var = $("#example").DataTable() ;
datatbale_name.ajax.reload(null, false );
尝试一下我希望它会起作用
$("#datatable_id").DataTable().ajax.reload();