同时执行多个Ajax调用,同时只进行一次等待

时间:2017-08-03 11:41:04

标签: javascript php jquery ajax

所以我有一个页面同时进行几个ajax调用。每个ajax调用都涉及一个块/ div,其中包含已被重新检索的数据,例如,假设有5个div。在渲染页面时,我希望其中一个主div完全加载并在其他div / blocks之前显示。

实施例。我有一个页面,顶部有一般信息,其他div是主要部分的更多细节。因此,它们应该同时被调用,但我希望通用div首先加载其所有内容,然后才允许在屏幕上显示更具体的div。

我希望所有调用都是异步的,但不知何故会延迟其他调用的外观。这可能吗?

我知道async:false只会在调用ajax调用时延迟,但我需要同时调用它们。

有什么想法吗?拜托,谢谢你。

3 个答案:

答案 0 :(得分:0)

你可以使用setTimeout(foo,3000);如果您需要等待特定的时间间隔,那么在该时间间隔之后调用您的函数foo()来执行您想要的操作

答案 1 :(得分:0)

您可以在一般的div Ajax调用成功时放置/调用其他Ajax调用。

答案 2 :(得分:0)

我想我是通过angular制作的,在我的情况下我需要在执行其他进程之前查询所有状态。创建一个结合了所有ajax请求的数组,然后使用$q.all等效于原生javascript' s 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;

   }