2013-05-09 2 views
5

로드 된 JSON 객체를 변수에 저장하려고합니다.파일에서로드 된 JSON 객체를 저장하는 방법은 무엇입니까?

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

내가 d3.json 함수 외부 jsonData에 액세스하려면 : 대신에, 내가 좋아하는 뭔가를 원

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

그러나 : 은 일반적으로 내가 좋아하는 뭔가를해야한다. 어떻게해야합니까?

답변

6

당신은 항상 기적 jQuery.ajax()를 사용할 수 있습니다

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

을이의 jQuery API에 설명 된대로 사용하지 않는 것이 좋습니다 그러나 :

아약스에서의 첫 글자가 작업 것을 의미한다 "비동기"의 약자 병렬로 발생하며 완료 순서가 보장되지 않습니다. $ .ajax()에 대한 async 옵션의 기본값은 true이며 요청이 이루어진 후에도 코드 실행을 계속할 수 있음을 나타냅니다. 이 옵션을 false로 설정하면 브라우저가 응답하지 않을 수 있으므로 호출을 더 이상 비동기로 만들지 않는 것이 좋습니다.

기능 d3.json()은 비동기입니다. 따라서 data 변수를 읽기 전에 데이터를 수신 할 때까지 기다려야합니다.

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

참고 :이 비동기 데이터를 처리 할 때, 연습이 d3.json() 함수 내에서 모든 일을 왜, 이유 양방향 데이터 비스에 따르면 How to import json data in D3?

5

: 대답은 내 이전 여기에 대답에서 영감을 Scott Murray (p 74)의 웹에서 먼저 전역 변수를 선언 할 수 있습니다. 콜백 함수에서 데이터를 전역 변수에 할당합니다.

var dataset; // global 

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

데이터 세트는 이후의 모든 기능에 소용입니다

+3

나는이 방법으로 있었다 문제는 dataset' 바로'd3.json' 호출 후에'에 액세스하려고하면, 그것은로드 한 모든 수 있다는 것입니다 오류로 이어질 수있는 – arvi1000

관련 문제