2013-06-25 53 views
9

Tôi muốn lấy dữ liệu trong biến toàn cầu bằng cách sử dụng đoạn mã sau:biến phạm vi trong d3 javascript

var data; 
d3.json ("file.json" , function(json) { 
    data = json; 
    console.log(data); //defined 
}); 
console.log(data); //undefined 

Nhưng vấn đề là tôi chỉ có biến dữ liệu được định nghĩa trong chức năng d3.json nhưng ra nó là undefined . Tôi có thể giải quyết vấn đề này bằng cách nào?

Cảm ơn

Trả lời

17

Bởi vì yêu cầu d3 (như d3.json) là không đồng bộ, đó là thực hành tốt nhất để bọc tất cả các mã phụ thuộc vào yêu cầu bên ngoài của bạn trong vòng gọi lại yêu cầu, đảm bảo rằng mã này có quyền truy cập vào các dữ liệu trước khi thực hiện. From the D3 docs: "Khi tải dữ liệu không đồng bộ, mã phụ thuộc vào dữ liệu đã tải thường phải tồn tại trong hàm gọi lại".

Vì vậy, một tùy chọn là đặt tất cả mã của bạn trong hàm gọi lại. Nếu bạn muốn tách mã thành các phần, bạn cũng có thể chuyển trả lời từ yêu cầu của bạn tới một chức năng riêng biệt, như sau:

function myFunc(data) { 
    console.log(data); 
} 

d3.json('file.json', function (data) { 
    var json = data; 
    myFunc(json); 
} 
+0

cảm ơn Nikhils để được trợ giúp và giải thích của bạn, nó hoạt động ngay bây giờ cho tôi – I3i0