Я открываю модальное окно начальной загрузки, чтобы показать «информационное сообщение обработки» с m_arc_dl.php
, После p_archive_dl.php
закончилась (обработка заканчивается) Я закрываю модальное окно.
То, что я заметил, время от времени модальное не закрывается … это, кажется, происходит, когда ответ от p_archive_dl.php
это действительно быстро. Я предполагаю, может быть, это из-за того, что модал исчезает и не загружается полностью до того, как произойдет закрытый вызов?
Любые предложения, чтобы я мог предотвратить это?
// show processing message
$('#modal-ajax').load(
'/modals/m_arc_dl.php',
function() {
$(this).modal('show');
}
);
$.ajax({
type: 'post',
url: '/process/p_archive_dl.php',
data: $(form).serialize(),
dataType : 'json'
}).done(function (response) {
if (response.success)
{
// create hidden iframe with the 'src' attribute set to the file to download
var dlif = $('<iframe/>',{'src':'/showdownload.php?file='+response.file+'&files='+response.files+'&ts=1&un=1'}).hide();
// append iframe to body
$(document.body).append(dlif);
}
// close the modal
$('#modal-ajax').modal('hide');
});
У вас есть два асинхронных запроса, поэтому неудивительно, что иногда их успешные обратные вызовы выполняются в порядке «вы не хотите».
Вы можете либо сделать второй запрос на первый успех, либо использовать флаг, чтобы определить, $(this).modal('show');
должно быть выполнено или нет.
Пример первого подхода:
// show processing message
$('#modal-ajax').load(
'/modals/m_arc_dl.php',
function() {
$(this).modal('show');
makeRequest();
}
);
function makeRequest() {
$.ajax({
type: 'post',
url: '/process/p_archive_dl.php',
data: $(form).serialize(),
dataType: 'json'
}).done(function(response) {
if (response.success) {
// create hidden iframe with the 'src' attribute set to the file to download
var dlif = $('<iframe/>', {'src': '/showdownload.php?file=' + response.file + '&files=' + response.files + '&ts=1&un=1'}).hide();
// append iframe to body
$(document.body).append(dlif);
}
// close the modal
$('#modal-ajax').modal('hide');
});
}
Других решений пока нет …