2013-07-24 28 views
0

談到這個問題的答案:jQuery的平行D3對象

Parallel asynchronous Ajax requests using jQuery

我們可以做同樣的事情,並在體內D3對象從問題

var done = 4; // number of total requests 
var sum = 0; 

/* Normal loops don't create a new scope */ 
$([1,2,3,4,5]).each(function() { 
    var number = this; 
    $.getJSON("/values/" + number, function(data) { 
    sum += data.value; 
    done -= 1; 
    if(done == 0) $("#mynode").html(sum); 
    }); 
}); 
+0

如果這就是你要求的,你應該可以簡單地用'd3.json'替換'$ .getJSON'。 –

+0

謝謝,我會閱讀並更新這個! – nevermind

回答

0

正如評論中提到的那樣,d3.json的工作原理與$.getJSON大致相同,因此您可以使用相同的ap proach。然而,D3的同一作者有一個庫Queue.js,它爲您制定了流程並使結果更易於處理。

下面是從D3 release notes的例子:

queue() 
    .defer(d3.json, "us-states.json") 
    .defer(d3.tsv, "us-state-populations.tsv") 
    .await(ready); 

function ready(error, states, statePopulations) { 
    // display map here 
} 

我還要提到的是D3並不關心數據是如何得出的,所以如果你已經打算使用jQuery在頁面旁邊D3有沒有通過d3自己的方法獲得數據的真正好處。 d3內置d3.json之類的東西的主要好處是,如果您不需要,可以避免加載類似jQuery的東西。