У меня есть таблица, которая генерируется через Thymeleaf. Я хотел бы обновить содержимое таблицы с помощью jQuery.
<table class="table table-hover" id="main-table">
<thead class="thead-inverse">
<tr>
<th class="col-md-2 text-center">Network Id</th>
<th class="col-md-2 text-center">Rep date</th>
<th class="col-md-2 text-center">Hashrate [KH/s]</th>
</tr>
</thead>
<tbody>
<tr th:each="networkHashrate : ${networkHashrates}" th:onclick="'javascript:openPoolModal(\''+ ${networkHashrate.id} + '\');'">
<td class="text-center" id="hashrateId" th:text="${networkHashrate.id}"> Sample id</td>
<td class="text-center" id="repDate" th:text="${@findAndDisplayDataService.formatDate(networkHashrate.repDate)}">Sample rep-date</td>
<td class="text-center" id="hashrate" th:text="${@findAndDisplayDataService.formatHashrate(networkHashrate.hashrate)}">Sample hashrate</td>
</tr>
</tbody>
</table>
Я придумал такую функцию для обновления содержимого таблицы каждые 8 секунд:
$(document).ready(function() {
var table = $('#main-table').DataTable({
ajax: {
url: '/refresh',
dataSrc:''
},
paging: true,
lengthChange: false,
pageLength: 20,
stateSave: true,
info: true,
searching: false,
"aoColumns": [
{ "orderSequence": [ "asc", "desc" ] },
{ "orderSequence": [ "asc", "desc" ] },
{ "orderSequence": [ "desc", "asc" ] }
],
"order": [[ 0, "asc" ]]
});
setInterval(function(){
table.ajax.reload();
}, 8000);
});
Вот ответ JSON:
[{
"id":1,
"repDate":{
"offset":{ },
"nano":880042000,
"year":2018,
"monthValue":4,
"dayOfMonth":25,
"hour":12,
"minute":58,
"second":53,
"month":"APRIL",
"dayOfWeek":"WEDNESDAY",
"dayOfYear":115
},
"hashrate":5114926.0
},...more entries
]
Напечатана пустая таблица, и я получаю сообщение об ошибке:
Uncaught TypeError: Cannot read property 'reload' of undefined
Также есть всплывающее окно с предупреждением:
Data Tables warning: table id=main-table - Requestem unknown parameter '0' for row 0 column 0. For more information about this error, please see: http://datatables.net/tn/4
РЕДАКТИРОВАТЬ
Я переместил объявление таблицы за пределы функции. Теперь я просто продолжаю получать предупреждение.
РЕДАКТИРОВАТЬ 2
Я сделал, как вы сказали, данные продолжают обновляться, но проблем все еще мало.
Прежде всего, мое свойство stateSave: true
перестало работать, поэтому при перезагрузке таблицы оно всегда возвращается на первую страницу.
Во-вторых, я потерял все свои стили (например, class="text:center"
) и свойство on:click
, которые изначально были в моем файле html
.