鍍金池/ 問答/Java  網(wǎng)絡(luò)安全  HTML/ ajax循環(huán)調(diào)用問題,很著急,求前輩看看

ajax循環(huán)調(diào)用問題,很著急,求前輩看看

我需要獲取每個(gè)月的統(tǒng)計(jì)數(shù)據(jù),然后統(tǒng)計(jì)云返回的是每天的。所以我分別傳參12個(gè)月的時(shí)間過去。調(diào)用12次,得到每個(gè)月的總數(shù)count。每次得到的值都賦值給一個(gè)數(shù)組month。這個(gè)數(shù)組保存12個(gè)月的總數(shù)。但是因?yàn)槭钱惒秸埱?,所以我在外面取不到?shù)組里面變量。我給ajax加上async以后,頁面會很慢加載。

var month = [];
    getAppStatisticDataById(0,'2018-1-1','2018-1-31')
    getAppStatisticDataById(1,'2018-2-1','2018-2-28')
    getAppStatisticDataById(2,'2018-3-1','2018-3-31')
    getAppStatisticDataById(3,'2018-4-1','2018-1-30')
    getAppStatisticDataById(4,'2018-5-1','2018-1-31')
    getAppStatisticDataById(5,'2018-6-1','2018-1-30')
    getAppStatisticDataById(6,'2018-7-1','2018-1-31')
    getAppStatisticDataById(7,'2018-8-1','2018-1-31')
    getAppStatisticDataById(8,'2018-9-1','2018-1-30')
    getAppStatisticDataById(9,'2018-10-1','2018-1-31')
    getAppStatisticDataById(10,'2018-11-1','2018-1-30')
    getAppStatisticDataById(11,'2018-12-1','2018-1-31')
    
    function getAppStatisticDataById(index,start,end) {
        $.ajax({
            url: 'https://r.apicloud.com/analytics/getAppStatisticDataById',
            type: 'post',
            timeout: 10000, // 超時(shí)時(shí)間 10 秒
            async :false,
            headers: {
                'X-APICloud-AppId': 'xxxxxxxxx',
                'X-APICloud-AppKey': varappKey,
            },
            dataType: "json",
            data: {

                    startDate: start,
                    endDate: end
            },
            success: function(data) {
                if(data.st == 1){
                  var count = 0;
                  for(let i = 0;i< data.msg.length; i++){
                  //循環(huán)把每天的數(shù)據(jù)加起來
                    count += data.msg[i].newRegsCount
                  }
                  //付給month數(shù)組
                  month[index] = count;
                }
            },
            error: function(err) {
              console.log(JSON.stringify(err)+'err')
            },
            complete: function(XMLHttpRequest, status) { //請求完成后最終執(zhí)行參數(shù)
                // alert(JSON.stringify(XMLHttpRequest)) 
            }
        })
    }
回答
編輯回答
眼雜

可以使用Promise.all,如果不支持ES6,可以模擬Promise.all

function allAjax(arr,callback){
    var count = 0,month = [];
    arr.map(function(item,i){
        $.ajax({
            ...
            success:function(data){
                month.push({
                    month:item,
                    data:data
                })
            },
            complete: function(){
                count ++ ;
                if(count==arr.length){
                    callback && callback(month)
                }
            }
        })
    })
}
var arr = [1,2,3]
allAjax(arr,function(month){
    console.log(month)
})
2017年10月15日 18:29
編輯回答
心上人
var month = [];
$.when(
  getAppStatisticDataById(0, '2018-1-1', '2018-1-31'),
  getAppStatisticDataById(1, '2018-2-1', '2018-2-28'),
  getAppStatisticDataById(2, '2018-3-1', '2018-3-31'),
  getAppStatisticDataById(3, '2018-4-1', '2018-1-30'),
  getAppStatisticDataById(4, '2018-5-1', '2018-1-31'),
  getAppStatisticDataById(5, '2018-6-1', '2018-1-30'),
  getAppStatisticDataById(6, '2018-7-1', '2018-1-31'),
  getAppStatisticDataById(7, '2018-8-1', '2018-1-31'),
  getAppStatisticDataById(8, '2018-9-1', '2018-1-30'),
  getAppStatisticDataById(9, '2018-10-1', '2018-1-31'),
  getAppStatisticDataById(10, '2018-11-1', '2018-1-30'),
  getAppStatisticDataById(11, '2018-12-1', '2018-1-31')
).then(function() {
  [].slice.call(arguments).forEach(function(data, index) {
    if (data.st == 1) {
      var count = 0;
      for (let i = 0; i < data.msg.length; i++) {
        //循環(huán)把每天的數(shù)據(jù)加起來
        count += data.msg[i].newRegsCount
      }
      //付給month數(shù)組
      month[index] = count;
    }
  })
})

function getAppStatisticDataById(index, start, end) {
  return $.ajax({
    url: 'https://r.apicloud.com/analytics/getAppStatisticDataById',
    type: 'post',
    timeout: 10000, // 超時(shí)時(shí)間 10 秒
    async: false,
    headers: {
      'X-APICloud-AppId': 'xxxxxxxxx',
      'X-APICloud-AppKey': varappKey,
    },
    dataType: "json",
    data: {

      startDate: start,
      endDate: end
    },
    error: function (err) {
      console.log(JSON.stringify(err) + 'err')
    }
  })
}
2017年4月24日 07:07