如何强制按顺序触发(Javascript)数据表请求?
我在一个页面中使用jQuery和DataTables,它从服务器获取数据并非常愉快地填充表 我需要进行更改,以确保来自dataTables库的请求以定义的顺序从服务器获取数据。我还需要能够在需要的时候触发更新(以正确的顺序更新所有表),因此需要一个函数来触发适当的代码 我的页面中有3个表格。我尝试在第一个表的回调方法中为下一个表添加一个table.fnReloadAjax()调用,该调用似乎只触发前两个表的刷新,或者根本不触发刷新 我还尝试创建一个函数来调用3个单独的函数,这些函数依次对每个表调用fnReloadAjax(),但由于异步,对服务器的请求顺序不同 我所尝试的,似乎并没有达到我所希望的。希望这能说明我的目标:如何强制按顺序触发(Javascript)数据表请求?,javascript,datatables,Javascript,Datatables,我在一个页面中使用jQuery和DataTables,它从服务器获取数据并非常愉快地填充表 我需要进行更改,以确保来自dataTables库的请求以定义的顺序从服务器获取数据。我还需要能够在需要的时候触发更新(以正确的顺序更新所有表),因此需要一个函数来触发适当的代码 我的页面中有3个表格。我尝试在第一个表的回调方法中为下一个表添加一个table.fnReloadAjax()调用,该调用似乎只触发前两个表的刷新,或者根本不触发刷新 我还尝试创建一个函数来调用3个单独的函数,这些函数依次对每个表调
firstTable= $('#firstShipment').dataTable({
"bServerSide": true,
...<snip>...
"fnInfoCallback": function (oSettings, iStart, iEnd, iMax, iTotal, sPre) {
secondTable.fnReloadAjax();
}
});
secondTable= $('#firstShipment').dataTable({
"bServerSide": true,
...<snip>...
"fnInfoCallback": function (oSettings, iStart, iEnd, iMax, iTotal, sPre) {
thirdTable.fnReloadAjax();
}
});
thirdTable= $('#firstShipment').dataTable({
"bServerSide": true,
...<snip>...
"fnInfoCallback": function (oSettings, iStart, iEnd, iMax, iTotal, sPre) {
//this is the last table, do nothing on completion
}
});
firstTable=$('#firstshipping')。数据表({
“bServerSide”:正确,
......
“FInfoCallback”:函数(oSettings、iStart、iEnd、iMax、iTotal、sPre){
fnReloadAjax();
}
});
secondTable=$('#FirstShipping')。数据表({
“bServerSide”:正确,
......
“FInfoCallback”:函数(oSettings、iStart、iEnd、iMax、iTotal、sPre){
fnReloadAjax();
}
});
thirdTable=$('#FirstShipping')。数据表({
“bServerSide”:正确,
......
“FInfoCallback”:函数(oSettings、iStart、iEnd、iMax、iTotal、sPre){
//这是最后一张表,完成后什么也不做
}
});
我很乐意使用在dataTables的init中定义的解决方案(我在上面尝试这么做),或者使用一个单独的函数,我可以定期调用以强制进行有序更新。为了以特定顺序填充数据并使其同步,您可以分两步执行数据检索。第一个,使用async:false参数进行同步ajax调用。见: 一旦得到结果,就可以使用datatable的Javascript数组数据源填充数据。见:
我希望这对您有所帮助。谢谢您的建议。奇怪的是,我重试了上面示例代码中给出的实现,现在它似乎每次都按顺序工作。我通过调用firstTable.fnReloadAjax()触发刷新,它在第二个表上有相同的回调,在第三个表上有相同的回调。更新是什么意思?您是否需要一个专用的更新按钮,还是希望使用内置的更新机制(例如,如果用户更改行数据表的排序顺序,则自动调用服务器)。第二个听起来很难,目的是每n秒重新加载一次数据。现在似乎正在使用上面的实现。当计时器达到零时,我对第一个表调用fnReloadAjax(),在执行回调之前,它不会对下一个表调用update。