2014-05-19 83 views
0

我正在构建一些自定义的社交共享图标。我正在使用以下请求来计算每个网络的共享,推文等。在“激活所有其他功能”部分下运行功能之前,我需要完成所有这些请求。按照我所拥有的方式嵌套它们,它迫使它们一次只运行一个。有没有一种方法可以处理这些问题,使它们全部同时运行,并使底部的功能在所有功能都完成之前不会运行?如何同时运行这些功能?

function getShares($URL) { 

// Get the Twitter Share Count 
jQuery.getJSON('http://cdn.api.twitter.com/1/urls/count.json?url=' + $URL + '&callback=?', function (twitdata) { 
    jQuery('.twitter .count').text(ReplaceNumberWithCommas(twitdata.count)); 
    // Get the LinkedIn Count 
    jQuery.getJSON('http://www.linkedin.com/countserv/count/share?url=' + $URL + '&callback=?', function (linkdindata) { 
     jQuery('.linkedIn .count').text(ReplaceNumberWithCommas(linkdindata.count)); 
     // Get Facebook Shares 
     jQuery.getJSON('http://graph.facebook.com/?id=' + $URL + '&callback=?', function (facebook) { 
      jQuery('.fb .count').text(ReplaceNumberWithCommas(facebook.shares));     
      // Get Pinterest Pins 
      jQuery.getJSON('http://api.pinterest.com/v1/urls/count.json?url=' + $URL + '&callback=?', function (pins) { 
       jQuery('.nc_pinterest .count').text(ReplaceNumberWithCommas(pins.count));    
       // Get Pinterest Pins 
       jQuery.getJSON('http://api.pinterest.com/v1/urls/count.json?url=' + $URL + '&callback=?', function (pins) { 
        jQuery('.nc_pinterest .count').text(ReplaceNumberWithCommas(pins.count));    

        // Activate All Other Functions 
        createFloatBar(); 
        setWidths(); 
        floatingBar(); 
        activateHoverStates(); 
       }); 
      }); 
     }); 
    }); 
}); 

}

+5

http://api.jquery.com/jquery.when/会做你想要什么 – jraede

+0

这正是我一直在寻找。你应该以答案的形式提出这个问题,以便我可以选择它并为它投票。 :-) –

回答

4

是包裹一切

$.when() 
要同时运行

,都是完整的,当他们,那么这$.then()将执行

$.when( 
    // code to run, 
    // code to run , 
    //code to run, 
).then(function(){ 

    // runs when everything in top block is finished 
}); 

可以Google jQuery延期执行或jQuery承诺

+0

完美。这正是我所期待的。真棒。 –

0

另一种选择是async.js库。它还具有额外的好处,可以让您将结果放入最终函数可以使用的对象中。从文档

https://github.com/caolan/async

例子:

// an example using an object instead of an array 
async.parallel({ 
    one: function(callback){ 
     setTimeout(function(){ 
      callback(null, 1); 
     }, 200); 
    }, 
    two: function(callback){ 
     setTimeout(function(){ 
      callback(null, 2); 
     }, 100); 
    } 
}, 
function(err, results) { 
    // results is now equals to: {one: 1, two: 2} 
}); 

要与你的代码中使用,你只要把你的getJSON通话到位setTimeout电话,放置callback函数内并通过成果转化它。