#jquery #datatable #pace
#jquery #datatable #pace
Вопрос:
Я бы хотел использовать PACE для ajax-запросов Datatable. Итак, я отключил обработку данных как processing : false
. И тогда что мне нужно для обработки панели обработки PACE для отображения ajax-запросов каждого Datatable?
Ответ №1:
Похоже, что он должен просто работать по умолчанию для запросов AJAX, если вы хотите, чтобы он применялся для сортировки / обработки событий, вам может понадобиться что-то вроде следующего:
Адаптировано из https://datatables.net/reference/event/processing Вероятно, вы захотите запустить PACE в событии обработки данных по звукам вещей:
$('#dataTable')
.on( 'processing.dt', function ( e, settings, processing ) {
if(processing){
Pace.start();
} else {
Pace.stop();
}
})
.dataTable();
Комментарии:
1. Вы также можете использовать события preXhr и xhr, если это не работает автоматически в AJAX — datatables.net/reference/event/preXhr , и datatables.net/reference/event/preXhr для получения документации по этим конкретным событиям. Должно быть довольно тривиально адаптировать приведенные выше примеры к тем конкретным событиям (on
preXhr.dt
и on ‘onxhr.dt
), которые будут двумя событиями, требующими подключения2. В моем приложении у меня много страниц, использующих datatable с разными идентификаторами . Могу ли я настроить глобально вместо изменения существующих кодов в качестве вашего ответа?
3. Это работа, как вы описали. Мне все еще нужно установить
ajax
параметр pace наfalse
?4. Я бы предложил применить к ним класс, который затем можно использовать глобально, т.Е.
$('.pace-dt').on...
Если вы запускаете вручнуюPace.start
иPace.stop
через обработчики событий, вам может потребоваться установить значение false, если вы хотите предотвратить запуск других запросов AJAX, вызывающих Pace. Если применение класса не работает с приведенным выше, попробуйте что-то вроде$('.pace-dt').each(function(){ $(this).on.... })
5. Должен подчеркнуть, что я ожидаю, что PACE должен иметь возможность автоматически обнаруживать запросы AJAX, и запуск вручную не требуется, если не использовать его для чего-то вроде сортировки, что может занять некоторое время на стороне клиента.
Ответ №2:
Ну, если вы хотите показывать PACE
для каждого ajax-запроса в своем приложении, вы можете указать его, как показано ниже
Добавление параметров темпа перед его загрузкой.
<script>
window.paceOptions = {
ajax: {
trackMethods: ['GET', 'POST', 'PUT', 'DELETE', 'REMOVE']
}
};
</script>
<script src="../js/progressBar/pace.min.js"></script>
При этом будет отображаться индикатор выполнения PACE для каждого ajax-запроса к вашему серверу.
Комментарии:
1. Да, вы правы.. Я также читал об этом из документации PACE , но я думаю, что это не влияет на запрос ajax DataTable. Но я не уверен, потому что я работаю на localhost, и запрос выполняется слишком быстро.
2. В моем случае он отлично работает при загрузке
DataTables
(черезDataTables
ajax-запрос). Можете ли вы создатьJSFiddle
свою проблему?3. В моем случае это работает при первой загрузке страницы. Я также хотел бы получить это при запуске поиска по данным .
4. Вы выполняете обработку на стороне сервера или на стороне клиента? Если на стороне сервера, то он будет работать, если на стороне клиента, то не будет.
Ответ №3:
Просто использовать эту форму:
$('#dataTable').on('processing.dt', function(e, settings, processing) {
if (processing) {
Pace.stop();
Pace.bar.render();
} else {
Pace.stop();
}
}).DataTable();