关闭bootstrap模态...有时它不会关闭

时间:2014-10-23 06:04:09

标签: php jquery twitter-bootstrap twitter-bootstrap-3

我正在打开一个引导模式窗口,用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 个答案:

答案 0 :(得分: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');                                              
    });
}