【问题标题】:Executing Multiple Ajax calls at same time while making all but one wait同时执行多个 Ajax 调用,同时让除一个等待之外的所有调用
【发布时间】:2017-08-03 20:44:21
【问题描述】:
所以我有一个页面同时进行多个 ajax 调用。每个 ajax 调用都与一个块/div 相关,其中包含已检索的数据,例如,假设有 5 个 div。呈现页面时,我希望一个主 div 完全加载并显示在其他 div/块之前。
例如。我有一个顶部有一般信息的页面,其他 div 是主 div 的一部分的更多详细信息。所以它们应该同时被调用,但我希望通用 div 先加载其所有内容,然后再允许更具体的 div 显示在屏幕上。
我希望所有调用都是异步的,但会以某种方式延迟其他调用的出现。这可能吗?
我知道 async: false 只会在调用 ajax 调用时延迟,但我需要同时调用它们。
有什么想法吗?请,谢谢。
【问题讨论】:
标签:
javascript
php
jquery
ajax
【解决方案1】:
你可以使用 setTimeout(foo, 3000);如果你需要等待一个特定的时间间隔,那么在那个时间间隔之后调用你的函数 foo() 来做你想做的事情
【解决方案2】:
您可以在一般 div Ajax 调用成功时发出/调用其他 Ajax 调用。
【解决方案3】:
我想我是通过 Angular 实现的,在我的情况下,我需要在执行到其他进程之前查询所有状态。创建一个组合所有 ajax 请求的数组,然后使用 $q.all 等效于原生 javascript 的 Promise.all()
getAllStatusResult() {
let promises = [];
let statusList = ['all','done','ongoing','cancelled'];
let responseList = [];
let date = new Date(), y = date.getFullYear(), m = date.getMonth();
let deferred = $q.defer();
statusList.map(status => {
let payload = {
start_date: "2017-1-1",
end_date: formatDate(date),
filter: { status }
}
promises.push(ReportsService.getRevenues(payload).then((response) => {
responseList.push({ name: status, total:response.data.total});
}));
});
$q.all(promises).then(() => {
deferred.resolve(responseList);
}).then(response => {
return response;
});
return deferred.promise;
}