У меня есть набор данных, который загружен в JQuery и отображается в виде таблицы через JQuery DataTable.net
Я выполняю команду уничтожения и снова создаю таблицу в зависимости от конкретных параметров:
$('#mytables').DataTable().destroy();
$("table tbody").empty();
$.each(myobject, function(i, obj) {
counter++;
$("table tbody").append(
"<tr>" +
"<td id=\"s"+obj.Session_ID+"\" class=\"list\">"+
counter +
"</td>" +
"</tr>"
})
$('#mytables').DataTable( {
order: [[ 0, "desc" ]],
paging: false,
"columnDefs": [ {
"targets": 'no-sort',
"orderable": false,
} ]
} );
Так как иногда это может занять одну секунду или более, я бы хотел разместить на странице div «loading» и удалить его, как только данные будут готовы.
<div class="modal2"><!-- Place at bottom of page --></div>
$("body").addClass("loading");
$("body").removeClass("loading");
Проблема в том, что я попробовал практически всесобытия DataTables, но они либо не выполняются в порядке, который я ожидал (таким образом, загрузочный div остается видимым), либо они происходят слишком быстро, чтобы увидеть загрузочный div.
В какие события я должен поместить код, который загружает ивыгружает мою "загрузку" div?
ПРИМЕЧАНИЕ: данные НЕ извлекаются через AJAX
РЕДАКТИРОВАТЬ
Следующий код,который в соответствии с документацией должен работать, не скрывает ли мод загрузки до того, как таблица на самом деле перерисована ...
$('#mytables').DataTable( {
order: [[ 0, "desc" ]],
paging: false,
"columnDefs": [ {
"targets": 'no-sort',
"orderable": false,
} ],
"initComplete": function(settings, json) {
$("body").removeClass("loading"); //doesn't work... it has no time to show the loader... :-(
console.log('done');
}
});
EDIT2
Хорошо, у меня естьРазобрал мою проблему: на самом деле я загрузилслишком много статического содержимого (200 КБ) на странице для загрузки в переменную javascript, и Chrome пожаловался на то, что это заняло много времени.
По этой причине у меня было много секунд без активности или "загрузки" div.
Я переместил статический контент в вызов ajax (чтобы загрузка данных теперь была асинхронной), и яиспользовал «beforeSend» и «complete» события ajax для добавления и удаления «loading» div.
ПРИМЕЧАНИЕ для datatables:
Я пытался сделать то же самое для событий datatables (в случае поиска / сортировки), но безуспешно (в любом случае это не большая проблема дляменя сейчас, как перерисовка происходит сейчас быстро) ...