Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/418.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何强制按顺序触发(Javascript)数据表请求?_Javascript_Datatables - Fatal编程技术网

如何强制按顺序触发(Javascript)数据表请求?

如何强制按顺序触发(Javascript)数据表请求?,javascript,datatables,Javascript,Datatables,我在一个页面中使用jQuery和DataTables,它从服务器获取数据并非常愉快地填充表 我需要进行更改,以确保来自dataTables库的请求以定义的顺序从服务器获取数据。我还需要能够在需要的时候触发更新(以正确的顺序更新所有表),因此需要一个函数来触发适当的代码 我的页面中有3个表格。我尝试在第一个表的回调方法中为下一个表添加一个table.fnReloadAjax()调用,该调用似乎只触发前两个表的刷新,或者根本不触发刷新 我还尝试创建一个函数来调用3个单独的函数,这些函数依次对每个表调

我在一个页面中使用jQuery和DataTables,它从服务器获取数据并非常愉快地填充表

我需要进行更改,以确保来自dataTables库的请求以定义的顺序从服务器获取数据。我还需要能够在需要的时候触发更新(以正确的顺序更新所有表),因此需要一个函数来触发适当的代码

我的页面中有3个表格。我尝试在第一个表的回调方法中为下一个表添加一个table.fnReloadAjax()调用,该调用似乎只触发前两个表的刷新,或者根本不触发刷新

我还尝试创建一个函数来调用3个单独的函数,这些函数依次对每个表调用fnReloadAjax(),但由于异步,对服务器的请求顺序不同

我所尝试的,似乎并没有达到我所希望的。希望这能说明我的目标:

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。