如何在$ .ajax()error()上显示BlockUI模式对话框?

时间:2011-04-15 06:17:10

标签: javascript jquery ajax blockui

当我点击表单的提交按钮时,会调用startValidateFormParameters()函数。

在此函数中,我使用BlockUI阻止UI并运行AJAX请求以验证表单中的某些信息。

如果表单数据以某种方式出现错误,则AJAX url将返回403错误响应,该响应将触发AJAX请求的error()调用以及403特定的条件。

如果我在特定于403的错误调用中使用alert(),则UI将保持阻止状态(根据需要)。

我想做的是 - 而不是使用alert()对话框 - 使用BlockUI的模态对话框,它看起来好多了。

但是,一旦调用了错误代码,错误模式对话框就会弹出并几乎立即消失,因为AJAX调用停止并且UI被解除阻塞。

如何阻止UI以便显示错误模式?

以下是相关代码:

$(document).ready(function() {
    ...
    $('#modalErrorOK').click(function() { 
        $.unblockUI(); 
        return false; 
    }); 
});

function startValidateFormParameters() {
    $.blockUI({
        message: '<h1><span style="display:inline-block; vertical-align:middle"><img src="https://example.com/resources/indicator.gif"/></span>\
 Validating form parameters...</h1>'
    });
    validateFormParameters();
}

function validateFormParameters() {
    $.ajax({
        url: "/validateFormParameters.pl",
        type: "POST",
        data: ({"formSummary" : JSON.stringify($.foobar.formSummary)}),
        dataType: "JSON",
        cache: false,
        success: function (response){
            alert(JSON.stringify(response));
        },
        error: function (request, status, error) {
            if (request.status == 401) { 
                window.location.replace(document.location.href);
            }
            else if (request.status == 403) {
                $('#modalErrorMsg').replaceWith('<div id="modalErrorMsg">' + request.responseText + '</div>');
                $.blockUI({
                    message: $('#modalError')
                });
            }
            else
                alert(request.status + "\n" + request.responseText);
        }
    });
}

$(document).ajaxStop($.unblockUI);

我有一个DOM对象来保存错误对话框:

<div id="modalError" style="display:none; cursor: default">
    <h1>Error</h1>
    <div id="modalErrorMsg"></div>
    <input type="button" id="modalErrorOK" value="OK" />
</div>

1 个答案:

答案 0 :(得分:4)

我想,删除这一行:

$(document).ajaxStop($.unblockUI);

当ajax完成时,将阻止UI被解除阻止,您需要将其替换为:

$(document).ajaxSuccess($.unblockUI);

然后在错误回调中正常调用模态对话框。

然后在对话框的OK按钮中添加.click()侦听器:

$('#modalErrorOK').click(function() { 
    $.unblockUI(); 
    return false; 
});

您可能还需要致电:

$.unblockUI();

对于未显示对话框的错误回调的其他部分。