Я не использовал DataTable
много, но я полагаю, что они используются для того, чтобы обеспечить различные функции, такие как сортировка и т. Д., Легко для ваших таблиц HTML. ( Ссылка )
Принимая во внимание проблему, я считаю, что ваша задача - обновить содержимое таблицы на основе ответа AJAX без необходимости обновления всей страницы.
Вы можете сделать это, используя append()
и remove()
функции jQuery. Простой алгоритм выглядит следующим образом:
- Прежде всего, вы можете иметь образец строки HTML где-то на своей странице, спрятанный так:
<div id="definition-row-sample">
<tr class="definition-row">
<td class="definition-id"></td>
<td class="definition-name"></td>
<td class="definition-description"></td>
<td class="definition-delete"></td>
</tr>
</div>
Сделайте
.definition-row
скрытым, чтобы он не отображался на вашей странице. Теперь, когда вы выбираете данные через AJAX, сначала удалите все строки с помощью:
$('.definition-row').remove()
, а затем переберите свои данныеи добавьте каждую строку в таблицу:
$.each(data, function (i, item) {
$('#definition-row-sample').find('.definition-id').text(data[i].id);
$('#definition-row-sample').find('.definition-name').text(data[i].definition_name);
$('#definition-row-sample').find('.definition-description').text(data[i].description);
//then simply append it to the table
let content = $('#definition-row-sample').find('.definition-row').clone();
$('#projDiscComTable').append(content);
});
А что касается удаления, вы можете определить нормальную функцию, например:
function definition_delete(id) {
$.ajax({
url: 'delete_project_definition',
type: 'GET',
data: {
project_def_id:id
}
});
}
document.on('click', '.definition-delete', function(){
let id = $(this).parent().find('.definition-id').text();
definition_delete(id);
});
Я не проверял код, но яя уверен, что вы поняли идею и заставили ее работать, так как я использовал логику, аналогичную одной из моих проектов.