È sempre possibile utilizzare jQuery.ajax() sincrono:
var jsonData;
$.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
Tuttavia non è consigliabile, come spiegato in jQuery API:
La prima lettera di Ajax sta per "asincrono", nel senso che l'operazione si verifica in parallelo e l'ordine di completamento non è garantito. L'opzione asincrona a $ .ajax() è impostata su true, a indicare che l'esecuzione del codice può continuare dopo aver effettuato la richiesta. L'impostazione di questa opzione su false (e quindi rendendo la chiamata non più asincrona) è fortemente sconsigliata, in quanto può causare la mancata risposta del browser.
La funzione d3.json()
è asincrona. Pertanto, è necessario attendere la ricezione dei dati prima di leggere la variabile data
. Questo è il motivo per cui, quando si tratta di dati asincroni, la pratica è di fare tutto all'interno della funzione d3.json()
:
d3.json("temp.json", function(data){
//use data here
})
// do not use data anymore
Nota: risposta ispirata dalla mia precedente risposta qui: How to import json data in D3?
fonte
2013-05-09 05:47:05
Un problema che ho avuto con questo metodo è che se si tenta di accedere 'dataset' subito dopo la chiamata' d3.json', potrebbe non tutti hanno caricato eppure ciò può portare ad errori – arvi1000