Khi trang web của tôi khởi tạo lần đầu tiên, nó truy vấn một máy chủ để lấy lại một số dữ liệu. Tôi không thể đặt bất kỳ thứ gì trên trang cho đến khi dữ liệu này được trả về. Với d3.js, tôi có thể sử dụng d3.json() để lấy dữ liệu của mình, nhưng vì nó không đồng bộ, tôi cần phải đặt toàn bộ logic trang trong hàm gọi lại. Tôi làm cách nào để yêu cầu dữ liệu và đợi nó quay lại?Làm cách nào để tải dữ liệu JSON một cách đồng bộ với d3.js?
Trả lời
Về cơ bản, bạn đang thực hiện nó theo cách duy nhất. Hàm gọi lại phải là hàm bắt đầu phần còn lại của mã của bạn. Tuy nhiên, bạn không cần tất cả mã của mình trong hàm gọi lại, bạn có thể giới thiệu tính không giới hạn. Vì vậy, chức năng gọi lại sẽ gọi một chức năng khác bên trong mà sẽ là những gì hiện đang trong chức năng gọi lại của bạn.
Sử dụng yêu cầu đồng bộ trong JavaScript không được khuyến nghị vì nó chặn toàn bộ chuỗi và không có gì được thực hiện trong thời gian chờ đợi. Người dùng cũng không thể tương tác tốt với trang web.
Nếu nó thực sự những gì bạn muốn, bạn có thể làm như sau (sử dụng jQuery):
var jsonData;
jQuery.ajax({
dataType: "json",
url: "jsondatafile.json",
async: false
success: function(data){jsonData = data}
});
Tuy nhiên nó không được khuyến khích, thậm chí bởi jQuery, như đã giải thích ở đây jQuery.ajax() documentation:
Chữ cái đầu tiên trong Ajax là viết tắt của "không đồng bộ", có nghĩa là hoạt động xảy ra song song và thứ tự hoàn thành không được đảm bảo. Tùy chọn async để $ .ajax() mặc định là true, cho biết rằng việc thực thi mã có thể tiếp tục sau khi yêu cầu được thực hiện. Đặt tùy chọn này thành false (và do đó làm cho cuộc gọi không còn không đồng bộ) được khuyến khích mạnh mẽ, vì nó có thể khiến trình duyệt không phản hồi.
Lưu ý cuối cùng, tôi không thấy điều gì ngăn bạn sử dụng bất kỳ chức năng nào trong thuộc tính success
theo cách không đồng bộ. Hầu hết các lần thay đổi thiết kế của bạn để sử dụng các yêu cầu không đồng bộ sẽ đáng giá. Theo kinh nghiệm, gỡ lỗi một trang sử dụng các yêu cầu đồng bộ là một nỗi đau (đặc biệt là khi các yêu cầu không được trả lời ...).
- 1. Làm cách nào để nhập dữ liệu XML bằng d3.js?
- 2. D3 - cách xử lý cấu trúc dữ liệu JSON?
- 3. d3 js làm hình ảnh
- 4. Cách tạo biểu đồ bằng cách sử dụng d3.js và dữ liệu crossfilter?
- 5. Làm cách nào để đăng thông số trên d3.json?
- 6. d3.js & json - mã mẫu đơn giản?
- 7. tải tệp js và các tệp js phụ thuộc khác một cách không đồng bộ
- 8. Làm cách nào để buộc iCloud với dữ liệu chính để đồng bộ hóa?
- 9. D3 JSON chuyển đổi dữ liệu
- 10. Cách đọc cơ sở dữ liệu sqlite3, sử dụng nút js, đồng bộ?
- 11. Làm cách nào để nhận JSON từ PHP sang JS?
- 12. Tải dữ liệu vào một DataGrid không đồng bộ
- 13. Tải JS bên ngoài đồng bộ với zombie.js
- 14. d3.js mặc định axis.tickFormat để đồng hồ 24 giờ
- 15. Tập lệnh nút Twitter được tải đồng bộ, cần tải nó một cách không đồng bộ
- 16. Sử dụng Công nhân Web và D3.js để tạo biểu đồ không đồng bộ?
- 17. d3.js: cách thức sao lưu DOM
- 18. Nhập dữ liệu từ .csv bằng d3.js
- 19. Adview (admob) với tải dữ liệu không đồng bộ
- 20. Sắp xếp dữ liệu cho đường dẫn d3.js
- 21. Làm cách nào để lấy dữ liệu JSON trong php?
- 22. Làm cách nào để Deserialize dữ liệu JSON?
- 23. d3.js Thêm một vòng tròn trong d3.geo.path
- 24. Dữ liệu thời gian thực với D3
- 25. Làm cách nào để đưa dữ liệu JSON vào CoffeeScript?
- 26. Làm cách nào để điền vào một ListView (trong Android) với dữ liệu XML hoặc JSON?
- 27. Nhúng csv vào HTML để sử dụng với D3.js
- 28. Sắp xếp một lựa chọn trong d3.js làm nhiễu dữ liệu tham gia
- 29. Có cách nào để tải tệp JS cục bộ không?
- 30. Sử dụng dữ liệu JSON trong hiển thị Javascript D3
Người dùng đang hỏi về d3, chứ không phải jQuery – EdgeCaseBerg
Cảm ơn phản hồi. Những gì OP yêu cầu là làm thế nào để thực hiện một yêu cầu đồng bộ, nó không thể làm điều này bằng cách sử dụng API D3 vì nó không phải là cách mọi thứ nên được thực hiện. Câu trả lời của tôi cung cấp một cách để làm điều này bằng cách sử dụng jQuery với một tuyên bố từ chối trách nhiệm lớn nói rằng nó không được khuyến cáo. Tôi đã chỉnh sửa câu trả lời của mình để làm cho nó rõ ràng hơn nó sử dụng jQuery và rằng nó không nên được thực hiện trong trường hợp chung. –