У меня есть модальное окно Bootstrap, которое запускается по ссылке. Примерно 3 секунды он просто остается пустым, в то время как запрос AJAX извлекает данные из базы данных. Как я могу реализовать какой-то индикатор загрузки? Предоставляет ли twitter bootstrap эту функцию по умолчанию?
РЕДАКТИРОВАТЬ: код JS для модального
<script type="text/javascript">
$('#myModal').modal('hide');
$('div.divBox a').click(function(){
var vendor = $(this).text();
$('#myModal').off('show');
$('#myModal').on('show', function(){
$.ajax({
type: "GET",
url: "ip.php",
data: "id=" + vendor,
success: function(html){
$("#modal-body").html(html);
$(".modal-header h3").html(vendor);
$('.countstable1').dataTable({
"sDom": "T<'row-fluid'<'span6'l><'span6'f>r>t<'row-fluid'<'span6'i><'span6'p>>",
"sPaginationType": "bootstrap",
"oLanguage": {
"sLengthMenu": "_MENU_ records per page"
},
"aaSorting":[[0, "desc"]],
"iDisplayLength": 10,
"oTableTools": {
"sSwfPath": "swf/copy_csv_xls_pdf.swf",
"aButtons": ["csv", "pdf"]
}
});
}
});
});
});
$('#myModal').on('hide', function () {
$("#modal-body").empty();
});
</script>
источник
ajaxStart()
иajaxStop()
было бы лучшим решением в соответствии с ответом @ajaristi, поскольку они срабатывают только один раз для каждой партии AJAX: stackoverflow.com/questions/3735877/…Есть глобальная конфигурация с использованием jQuery. Этот код запускается для каждого глобального запроса ajax.
<div id='ajax_loader' style="position: fixed; left: 50%; top: 50%; display: none;"> <img src="themes/img/ajax-loader.gif"></img> </div> <script type="text/javascript"> jQuery(function ($){ $(document).ajaxStop(function(){ $("#ajax_loader").hide(); }); $(document).ajaxStart(function(){ $("#ajax_loader").show(); }); }); </script>
Вот демонстрация: http://jsfiddle.net/sd01fdcm/
источник
.ajaxStart()
иajaxStop()
который срабатывает один раз для каждой партии AJAX: stackoverflow.com/questions/3735877/… .Индикатор загрузки - это просто анимированное изображение (.gif), которое отображается до тех пор, пока завершенное событие не будет вызвано в запросе AJAX. http://ajaxload.info/ предлагает множество вариантов для создания загружаемых изображений, которые вы можете накладывать на свои модальные окна. Насколько мне известно, Bootstrap не предоставляет встроенных функций.
источник
Вот как я заставил его работать с загрузкой удаленного контента, который нужно обновить:
$(document).ready(function () { var loadingContent = '<div class="modal-header"><h1>Processing...</h1></div><div class="modal-body"><div class="progress progress-striped active"><div class="bar" style="width: 100%;"></div></div></div>'; // This is need so the content gets replaced correctly. $("#myModal").on("show.bs.modal", function (e) { $(this).find(".modal-content").html(loadingContent); var link = $(e.relatedTarget); $(this).find(".modal-content").load(link.attr("href")); }); $("#myModal2").on("hide.bs.modal", function (e) { $(this).removeData('bs.modal'); }); });
По сути, просто замените модальный контент во время загрузки сообщением о загрузке. После завершения загрузки содержимое будет заменено.
источник
Вот как я реализовал индикатор загрузки с помощью Glyphicon:
<!DOCTYPE html> <html> <head> <title>Demo</title> <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"> <script src="https://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.12.4.min.js"></script> <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/bootstrap.min.js"></script> <style> .gly-ani { animation: ani 2s infinite linear; } @keyframes ani { 0% { transform: rotate(0deg); } 100% { transform: rotate(359deg); } } </style> </head> <body> <div class="container"> <span class="glyphicon glyphicon-refresh gly-ani" style="font-size:40px;"></span> </div> </body> </html>
источник