我想在进行特定的 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调试工具执行顺序异常的意思。blockui code
因为ajax完成后不应该执行)
这不是我想要的,我无法弄清楚。