zawsze można użyć jQuery.ajax() synchronicznie:
var jsonData;
$.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
jednak nie jest to zalecane, jak wyjaśniono w jQuery API:
Pierwsza litera w Ajax oznacza „asynchroniczny”, co oznacza, że operacja występuje równolegle, a kolejność ich realizacji nie jest gwarantowana. Opcja async do $ .ajax() domyślnie przyjmuje wartość true, co oznacza, że wykonanie kodu może być kontynuowane po wysłaniu żądania. Ustawienie tej opcji na false (i tym samym uniemożliwienie asynchronicznego wywołania) jest zdecydowanie odradzane, ponieważ może to spowodować, że przeglądarka przestanie odpowiadać.
Funkcja d3.json()
jest asynchroniczna. W związku z tym należy poczekać na przesłanie danych przed odczytaniem zmiennej data
. To jest powód, dlaczego, gdy mamy do czynienia z danymi asynchronicznych, praktyka jest zrobić wszystko wewnątrz d3.json()
funkcję:
d3.json("temp.json", function(data){
//use data here
})
// do not use data anymore
Uwaga: odpowiedź inspirowany z moim poprzednim odpowiedź tutaj: How to import json data in D3?
Problem miałem z tej metody jest to, że w przypadku próby uzyskania dostępu 'dataset' natychmiast po wywołaniu' d3.json', może nie wszystkie zostały załadowane a mimo to może prowadzić do błędów – arvi1000