我有以下javascript:
function someFunction(string) {
$.ajax({
type: "GET",
url: "some_endpoint_returning_json",
async: false,
data: "param=" + string,
beforeSend: function() {
$.blockUI({ message: '<h1><img src="static/busy.gif" /> Just a moment...</h1>' });
},
complete: function () {
$.unblockUI();
},
dataType: "json",
success: function(data) {
window.alert(data.status);
}
});
}
我希望UI在发送ajax请求之前使用包含的消息进行阻止,然后删除消息,取消阻止ui,然后执行成功功能。
目前正在发生的事情:
答案 0 :(得分:5)
如果将async
设置为false
,浏览器将在提供ajax请求时暂停所有内容的执行。虽然beforeSend
在发送ajax请求之前执行,但同步请求可能会很快发生,浏览器实际上不会刷新屏幕并显示$.blockUI
更改。在ajax完成后(当它们被立即删除时),你确实可以在很短的时间内看到它们。
如果您必须使用异步,您可以通过单独调用$.blockUI
并在启动ajax请求之前设置短暂超时(可能是100 MS)来解决此问题。