来自多个ajax请求的总和值

时间:2017-12-12 21:19:55

标签: javascript jquery ajax

我试图获取ajax请求返回的数据的总值,但它显示总计:0,因为它在完成ajax请求之前执行totalRev。

var totalRev = 0;
        $.ajax({
            type: "POST",
            url: "cloudmobi.php",
            data: {action: 'cloudmobi'},
            dataType:'JSON', 
            success: function(response){
                document.getElementById('cloudmobi').innerHTML = response.cloudmobi;
                console.log(response.cloudmobi);
                var cloudmobi = parseInt(response.cloudmobi);
                console.log('CLOUDMOBI:'+cloudmobi);
                totalRev += cloudmobi;

            }
        });
        $.ajax({
            type: "POST",
            url: "mobusi.php",
            data: {action: 'mobusi'},
            dataType:'JSON', 
            success: function(response){
                document.getElementById('mobusi').innerHTML = response.mobusi;
                console.log(response.mobusi);
                var mobusi = parseInt(response.mobusi);
                totalRev += mobusi;
                console.log('MOBUSI:'+mobusi);

            }
        });
        $.ajax({
            type: "POST",
            url: "appnext.php",
            data: {action: 'appnext'},
            dataType:'JSON', 
            success: function(response){
                document.getElementById('appnext').innerHTML = response.appnext;
                console.log(response.appnext);
                var appnext = parseInt(response.appnext);
                totalRev += appnext;
                console.log('APPNEXT:'+appnext);

            }
        });
        console.log('TOTAL:'+totalRev); 

我不想使用异步,因为这里使用ajax的全部目的是快速加载网站然后动态加载数据

2 个答案:

答案 0 :(得分:1)

jQuery" when"解决了你的问题:

$.when( d1, d2 ).done(function ( v1, v2 ) {
    console.log( v1 ); // "Fish"
    console.log( v2 ); // "Pizza"
});

答案 1 :(得分:0)

在单个请求中发送所有数据会更好,这样您就可以在服务器上执行总结并将其发送到响应中的单个属性中。

假设无论出于何种原因,你不能这样做,那么你可以存储来自AJAX请求的所有promise,然后在完成所有代码并将它们的值添加到数组后执行代码。然后你可以对数组求和。像这样:

var values = [];
var promises = [
  $.ajax({
    // ajax settings...
    success: function() {
      values.push(parseInt(response.cloudmobi), 10);
    }
  }),
  $.ajax({
    // ajax settings...
    success: function() {
      values.push(parseInt(response.mobusi), 10);
    }
  }),
  // Nrequests...
];

$.when.apply(this, promises).done(function() {
  var sum = values.reduce(function(a, b) {
    return a + b;
  }, 0);
  // work with sum here...
});