2014-10-23 2 views
1

Я открываю окно модального окна, чтобы показать «информационное сообщение обработки» с 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');            
}); 
+1

У вас есть два асинхронных запросов, так что не удивительно, что иногда их обратные вызовы успеха выполняются в порядке, не вы-хотите. Вы можете либо сделать второй запрос с первого успеха, либо использовать какой-то флаг, чтобы определить, будет ли выполняться или нет. $ (This) .modal ('show'); '. – Regent

+0

В моем случае проблема была с неполными тегами html. Например, забыть закрыть тег попёрно. Затем, после закрытия модального, я застрял с черным прозрачным фоном. – Beri

+0

@Regent - даже не передумал, но это имеет смысл. Просто заверните второй ajax в функцию и вызовите ее из первого после модального открытия. Кажется, делает трюк. Спасибо что подметил это! – user756659

ответ

2

У вас есть два асинхронных запросов, так что не удивительно, что иногда их обратные вызовы успеха выполняются в порядке, не вы-хотите.

Вы можете сделать второй запрос при первом успешном использовании или использовать флаг, чтобы определить, должно ли быть выполнено $(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');            
    }); 
} 
Смежные вопросы