防止模态解雇,直到ajax响应

时间:2013-11-14 12:59:35

标签: jquery ajax twitter-bootstrap

我想阻止引导模式在ajax响应之前解除,或者甚至在响应为false时不解除,我们说。
这是代码: 仅模态体:

    <div class="modal-body">    
<div class="control-group">
<div class="controls">
    <label for="sharedUser" class="control-label right">Share With:</label>
    <input type="text" name="sharedUser" id="sharedUser"  placeholder="Username to Share">
    <label class="help-block errorLabel fl width100" id="kpiNameError"></label>                                                         </div>
    </div>  </div>

这是确定如何处理模态的脚本:

function shareKpi(kpiId,username){
                var shareUrl = "${createLink(action:'shareKpi',controller:'dashboard')}"
                var msg;
                jQuery.ajax({
                    type: 'POST',
                    url: shareUrl,
                    data: "kpiId="+kpiId+"&sharedUser="+username,
                    success: function(response,textStatus){
                        msg=response;
                     },
                    error:function(XMLHttpRequest,textStatus,errorThrown){}
                });
                return false;
            }

我想要的是模态,直到ajax响应才被解雇。
实际上即使我不清楚这个问题,这个问题也可以进一步编辑或建议。
提前谢谢

1 个答案:

答案 0 :(得分:2)

您可以在关闭执行之前在Bootstrap触发的关闭事件(hide.bs.modal)上添加回调。

通过保持状态,您可以确定是否可以关闭模​​态。当不允许用户关闭模态并在ajax成功时显示它(并允许访问者关闭)时,隐藏关闭图标可能是个好主意。

以下是一些示例代码,可以帮助您进一步:

var ajaxSucceeded = false;

function shareKpi(kpiId, username){
    var shareUrl = "${createLink(action:'shareKpi',controller:'dashboard')}",
        msg;

    jQuery.ajax({
        type: 'POST',
        url: shareUrl,
        data: "kpiId="+kpiId+"&sharedUser="+username,
        success: function(response,textStatus){
            msg = response;
            ajaxSucceeded = true;
        },
        error:function(XMLHttpRequest,textStatus,errorThrown) {
            // show error message
            ajaxSucceeded = false;
        }
    });

    return false;
}

$('#myModal').on('hide.bs.modal', function () {
    if (!ajaxSucceeded) {
        // prevent closing of modal
        return false;
    }
});