当我点击表单的提交按钮时,会调用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>
答案 0 :(得分:4)
我想,删除这一行:
$(document).ajaxStop($.unblockUI);
当ajax完成时,将阻止UI被解除阻止,您需要将其替换为:
$(document).ajaxSuccess($.unblockUI);
然后在错误回调中正常调用模态对话框。
然后在对话框的OK按钮中添加.click()
侦听器:
$('#modalErrorOK').click(function() {
$.unblockUI();
return false;
});
您可能还需要致电:
$.unblockUI();
对于未显示对话框的错误回调的其他部分。