【发布时间】:2018-01-22 11:49:34
【问题描述】:
我的站点中有很多 ajax 调用,根据数据的大小,它可以让用户等待 2-4 秒。因此,当从服务器加载数据时,我想将鼠标样式更改为“忙碌”。我已经发现,通过使用这样的全局代码可以很好地完成异步 ajax 调用:
$(document).ajaxSend(function (){
$('body').addClass('wait');
}).ajaxComplete(function () {
$('body').removeClass('wait');
});
效果很好。问题是,我应该如何处理这些同步功能? 我需要在某个地方异步:假。因此,如果没有其他方法可以绕过它。我宁愿在每个同步 ajax 调用中手动编写相同的代码,也不愿将每个 ajax 调用重写为异步。因为它并不像将 false 更改为 true 那样容易。我发现的唯一方法是在 ajax 调用之前以及在 ajax 调用之后(我的意思是成功)手动添加代码,如下所示:
$('html, body').css("cursor", "wait");
$.ajax({
url: //your url
type: //your type post or get
dataType: "html",
data: //data send by ajax
success: function(returnData) {
$('html, body').css("cursor", "default");
//any other actions ....
},
error: function(e) {
alert(e);
}
});
它会工作,但我有 20 多个 js 文件,我什至不知道我有多少个 ajax 调用。所以我想问一下是否有另一种方法来解决它,所以我不需要在每个 ajax 调用中编写 50 多次相同的代码?
【问题讨论】:
-
您的第一个示例,使用全局
ajaxSend()和ajaxComplete()处理程序,是您需要的解决方案。为什么它不适合你? -
只需从您的
success回调中删除$('html, body').css("cursor", "default");并(当然)让wait类在您的 CSS 中正常运行。 -
@ashik 不,你不知道,这就是
ajaxSend和ajaxComplete的用途。除非您的意思是async: false案例。 -
@MinXIE 这正是你永远不应该使用
async: false的原因。由于浏览器 UI 被冻结,您无法在同步请求期间显示内容。仅使用异步请求,而使用回调模式。 -
The point is, I need at somewhere the async: false不,你没有。除了设计糟糕的系统或糟糕的代码之外,同步请求不再有任何正当理由。如果您正在努力将逻辑更改为异步,我建议您提出一个新问题。
标签: javascript jquery ajax asynchronous