我使用jQuery和jQuery DataTables。
我遇到的问题是,是否有可能在jQuery Ajax中调用DataTable的ajax来重新获取数据?
原因是:
如果一个人打开了同一张桌子的两个网页。
如果在一个表上,他更改了表的列,则列名与网页上的数据库同步。因此,包含相同表的第二个网页将具有不一致性(因为列与数据库不匹配)。
当get请求的columns数组与数据库中存储的数组不同时,我正试图在服务器端代码中检测到这一点。
例如:
1#网页有一个获取请求列[0] =“第1列”,列[1] =“第2列”
检查数据库,数据库说有两列,名称为“第1列”和“第2列”。发现列是一致的,并将数据发送给用户。
在#1网页上,用户将列更改为3列,并自动同步到数据库。
另一方面,#2网页处于空闲状态,但是当调用fnDraw时,它会注意到get requests列和数据库中的列不同。现在它需要调用ajax函数,直到它不会返回不需要的响应状态。
目前我有我的代码:
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。
因此当同一个人访问两个地方的网页时,并编辑一个表的列。为了保持一致性,我将使用location.reload()在用户的网页上进行刷新。
但是,我只想刷新一个DataTable而不是整个网页。
当出现问题时,是否可以调用DataTable的ajax?
我打算在变量表周围放置一个while循环,但由于Ajax是异步的,因此可能会搞乱表格。
我在想这样的事情
$(this).DataTable().destroy();
$(this).empty();
$(this).refresh(); <-- This function does not exist
有人能指出我正确的方向吗?
谢谢!
答案 0 :(得分:1)
如果我理解正确,您在同一页面上有多个数据表。
当用户修改另一个列的列时,如何更新另一个列的属性并告诉它重绘?
var t1 = $('#table1').dataTable();
var t2 = $('#table2').dataTable();
假设您有一个监视t1
更改的函数。要更新t2
运行t2.fnDraw()
fnDraw()
将使用最新参数重绘表格。