2013-05-09 29 views
5

Yüklü bir JSON nesnesini değişkende depolamak istiyorum.Dosyadan yüklenen bir JSON nesnesi nasıl saklanır?

var jsonData = d3.json("jsondatafile.json"); 

Ben d3.json işlevi dışında jsonData erişmek istiyorum: yerine, şöyle bir şey istiyorum,

d3.json("jsondatafile.json", function(json){ DO SOMETHING; }); 

Ama: Normalde böyle bir şey yapmak gerekir. Bunu nasıl yapabilirim?

cevap

6

Hep eşzamanlı jQuery.ajax() kullanabilirsiniz:

var jsonData; 
$.ajax({ 
    dataType: "json", 
    url: "jsondatafile.json", 
    async: false 
    success: function(data){jsonData = data} 
}); 

o jQuery API açıklandığı gibi tavsiye edilmez Ancak:

Ajax ilk harf operasyonu anlamına "asenkron" anlamına gelir Paralel olarak gerçekleşir ve tamamlanma sırası garanti edilmez. $ .ajax() işlevinin varsayılan eşzamanlaması seçeneği, istek yürütüldükten sonra kod yürütme işleminin devam edebileceğini gösterir. Tarayıcının yanıt vermemesine neden olabileceğinden, bu seçeneğin false (ve böylece çağrının artık eşzamansız hale getirilmesini) için ayarlanması kesinlikle önerilmez.

d3.json() işlevi, eşzamansızdır. Bu nedenle, data değişkenini okumadan önce verilerin alınmasını beklemeniz gerekir.

d3.json("temp.json", function(data){ 
    //use data here 
}) 
// do not use data anymore 

Not: Bu asenkron veri ile uğraşırken, uygulama d3.json() işlevi içinde her şeyi yapmaya neden, nedeni Etkileşimli Veri Vis göre How to import json data in D3?

5

: cevabı önceki buradan cevap ilham Scott Murray (p 74) tarafından Web için, öncelikle bir küresel değişken bildirebilirsiniz. Geri arama işlevinin içinde, verileri genel değişkene atayın.

var dataset; // global 

d3.json("file.json", function(data) { 
    dataset = data; 
    //any other functions that depend on data 
}); 

veri kümesi sonraki tüm fonksiyonlara boşuna olduğunu

+3

Ben bu yöntemle vardı bir sorun dataset' hemen 'd3.json' çağrısından sonra' erişmeye çalışırsanız, bu yüklediğiniz tüm olabilmesidir henüz hangi hatalara yol açabilir – arvi1000