我正在使用AJAX调用处理一些Web服务。 在我的网页上,用户必须选择一个或多个人加入一个组。这个“组列表”被发送到一个PHP页面(使用POST方法),它将执行相关的Web服务。
我的问题是关于同步/异步AJAX调用。 我的目标是在此过程中显示动画(例如gif),它阻止用户界面,最后显示消息“完成”。我使用两个Jquery插件:Apprise用于消息,jquery msg用于动画。
在同步模式下:不显示动画,但是当AJAX调用完成时,将显示消息“完成”。 在异步模式下:显示动画,但在AJAX调用结束之前显示消息“完成”。
所以我的问题是,我是否必须排队多个异步AJAX调用?还是其他什么?
答案 0 :(得分:1)
是的,这可能是因为您在同一时刻运行了多个异步调用。
我使用以下小脚本来控制当前运行的ajax调用次数:
$.xhrPool = { calls: [] };
$.xhrPool.abortAll = function () {
$(this.calls).each(function (idx, jqXHR) {
jqXHR.abort();
});
$.xhrPool.calls = [];
};
// Setup ajax requests
$.ajaxSetup({
beforeSend: function (jqXHR) {
$.xhrPool.calls.push(jqXHR);
},
complete: function (jqXHR) {
var isInArray = $.inArray(jqXHR, $.xhrPool.calls);
if (isInArray > -1) {
$.xhrPool.calls.splice(isInArray, 1);
}
}
});
这样,您将在数组$.xhrPool.calls
中拥有所有当前活动的ajax请求。然后,您可以检查if ($.xhrPool.calls.length == 0)
,如果是,则删除加载动画。
此外,您可以致电$.xhrPool.abortAll()
,这将停止所有有效的ajax请求。