【发布时间】:2012-09-17 15:51:37
【问题描述】:
我想在进行特定的 ajax 调用时阻止当前页面,并使用 blockUI 作为消息框。我不能只使用$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
我的代码如下..
bc.find('.submit').click(function (e) {
e.preventDefault();
if ($(this).hasClass('lock'))
return;
$.blockUI();
$(this).addClass('lock');
bc.submit();
});
var validator;
validator = bc.validate({
ignore: '',
rules: {
UserName: {
required: true
}
},
messages: {
UserName: 'must have',
},
submitHandler: function (form) {
$.ajax({
url: '/yyyy/xxxx',
type: 'POST',
data: postdata,
complete: function () {
bc.find('.submit').removeClass('lock');
},
success: function (data) {
if (data.status == 'OK') {
$.blockUI({ message: 'OK' });
......
}
else {
switch (data.status) {
case 'xxx':
......
}
$.unblockUI();
}
},
error: function () {
$.unblockUI();
alert('xxx');
}
});
}
});
场景是,当我点击.submit按钮时,页面被阻塞,向服务器进行ajax调用以获取数据响应。当 ajax 调用成功时,我取消阻止当前页面,如果 data.status 为“OK”,我会显示一个消息框(也基于 blockUI 插件)。否则我会在当前页面显示错误,然后取消阻止。
在2016年编辑,有一个编辑改变了问题的意思(可能是因为我当时的英语很差),我把更改回滚了,更清楚,请不要在下面更改再次。
但其实只有在ajax调用完成后(debug step over ajax complete handler中的代码),然后看:
- 第一个
$.blockUI();执行 - 是否执行
$.blockUI({ message: 'OK' }) - 然后调用
$.unblockUI()
(以上是回答中chrome或firefox调试工具执行顺序异常的意思。因为ajax完成后不应该执行blockui code)
这不是我想要的,我想不通。
【问题讨论】:
-
您可以使用 ajaxBlockUI 大大简化您的代码,请参阅stackoverflow.com/a/28358070/460084
标签: jquery ajax blockui jquery-blockui