jQuery 和 DataTables - 是否可以重新调用之前的 AJAX 命令?

jQuery and DataTables - Is it possible to re-call the previous AJAX command?

我正在使用 jQuery 和 jQuery 数据表。

我遇到的问题是,是否可以在 jQuery Ajax 中调用 DataTable 的 ajax 再次获取数据?

原因是:

如果一个人打开了两个相同 table 的网页。

如果在一个 table 上,他更改了 table 的列,列名将同步到网页上的数据库。因此,包含相同 table 的第二个网页将不一致(因为列与数据库不匹配)。

当获取请求的列数组与数据库中存储的不同时,我试图在服务器端代码中检测到这一点。

例如:

1#网页有get请求columns[0] = "column 1", columns[1] = "column 2"

查询数据库,数据库说有两列,名称为"column 1"和"column 2"。发现列一致,发送数据给用户

在#1 网页,用户将列更改为 3 列,并自动同步到数据库。

另一方面,#2 网页是空闲的,但是当调用 fnDraw 时,它注意到 get 请求的列与数据库中的不同。现在它需要调用 ajax 函数,直到它没有 return 不需要的响应状态。

目前我有我的代码:

var table = $('#'+String(response.chartID[i])).DataTable({
    stateSave: true,
    aoColumnDefs: aryJSONColTable,
    processing: true,
    serverSide: true,
    bDestroy: true,
    "scrollX": true,
    ajax:
    {
        type: 'POST',
        url:"ajax_retrieveMainChartData/",
        dataType: 'json',
        data:
        {
            'csrfmiddlewaretoken':csrftoken,
            'activeTab':activeTab,
            'chartID':response.chartID[i],
        },
    },
})
.on('xhr.dt', function(e, settings, response)
{
    if (response.status == "refresh")
    {
        location.reload();
    }
});

我已经在服务器端实施了检查。但是对于我的前端,基本上当服务器端和服务器端的列不匹配时,我会执行 location.reload。

因此当同一个人在两个地方访问网页,并编辑一个table的专栏时。为了保持一致性,我将使用 location.reload() 来刷新用户的网页。

但是,我只想刷新其中一个数据表,而不是整个网页。

DataTable出现问题时是否可以召回ajax?

我打算围绕变量 table 放置一个 while 循环,但这可能会弄乱 table,因为 Ajax 是异步的。

我在想这样的事情

$(this).DataTable().destroy();
$(this).empty();
$(this).refresh(); <-- This function does not exist

有人能给我指出正确的方向吗?

谢谢!

如果我理解正确的话,您在同一页上有多个数据table。

当用户修改其中一个的列时,您更新另一个的属性并告诉它重绘怎么样?

var t1 = $('#table1').dataTable();
var t2 = $('#table2').dataTable();

假设您有一个监视 t1 变化的函数。更新 t2 运行 t2.fnDraw()

fnDraw() 将使用最新的参数重新绘制 table。