2013-03-09 30 views
49

Tôi muốn giữ tài liệu json để lưu trữ một số dữ liệu đơn giản và tôi muốn yêu cầu tài liệu này và sử dụng đối tượng json trong cuộc gọi define() để tôi có thể sử dụng nó. Đây không phải là cuộc gọi "không đồng bộ". Tôi có nghĩa là nó nên được phát triển nhưng tôi muốn biên dịch các tập tin trên xây dựng không giống như một cuộc gọi async thực tế từ một API, nơi mà nội dung là năng động.requirejs tải tệp JSON tĩnh

+0

Chính xác thì câu hỏi của bạn là gì? bởi vì tôi không thấy bất kỳ vấn đề gì với điều đó. –

+1

@ WillemD'haeseleer Vâng, tôi không chắc mình phải làm thế nào. Tôi không thể bao gồm tệp '.json' trong đường dẫn. – ThomasReggi

Trả lời

60

Cách dễ nhất để thực hiện việc này là sử dụng plugin json requirejs cho việc này, điều này cũng sẽ cho phép bạn đưa tệp của mình vào bản dựng.

https://github.com/millermedeiros/requirejs-plugins
Dưới đây là một ví dụ:

require(['json!someFile.json'], function(data){ 
    ... 
}) 
// It does not actually need to be a .json extension, this will work to: 
require(['json!someFile'], function(data){ 
    ... 
}) 

Nếu bạn muốn bao gồm các tập tin trong r.js bạn xây dựng để nó luôn được tối ưu hóa trong/main js bootstrap tập tin bạn cần phải thêm nó với tùy chọn bao gồm

Bạn cũng có thể sử dụng plugin văn bản yêu cầu js cho plugin này, thường được sử dụng để tải tệp mẫu nhưng bạn cũng có thể sử dụng nó để tải các tệp .json.

https://github.com/requirejs/text

Bạn sẽ phải phân tích các nội dung tự của bạn sau đó với JSON.parse
(Bao gồm json2.js để cung cấp hỗ trợ cho các trình duyệt cũ nếu đó là bắt buộc)

Bạn cũng có thể quấn json theo riêng của nó xác định() vì vậy bạn chỉ có thể yêu cầu nó theo truyền thống, nhưng điều đó sẽ không hoạt động nếu bạn bị giới hạn trong một tệp thực tế .json.

Một tùy chọn khác là yêu cầu tệp văn bản máng ajax tự của bạn, với jquery hoặc một cái gì đó.

$.get('somefile.json', function(data) { 
    // do something with your data 
}); 
+3

Tôi đã đi với 'requirejs-plugins' và nó có một plugin' json' mà tôi đã bỏ qua. Nó sử dụng 'text' như một sự phụ thuộc. Cảm ơn! Tôi mới bắt đầu làm việc với requirejs hôm nay trên trình duyệt và nó thật tuyệt vời. Tôi vẫn hy vọng rằng khi tôi xây dựng nó sẽ ngừng sử dụng ajax để lấy tài liệu. – ThomasReggi

+0

@ThomasReggi kiểm tra câu trả lời được điều chỉnh của tôi để biết thông tin về điều đó –

+1

Tôi gặp sự cố khi sử dụng văn bản! cho nội dung JSON khi được kết hợp với r.js để tối ưu hóa. Chỉ cần một đầu lên. – SimplGy

8

viết bài này một câu trả lời, bởi vì:

  • đó là những gì người dùng đặt ra câu hỏi thực sự sử dụng như giải pháp của họ
  • nó sạch hơn để nhìn vào hơn đòi hỏi văn bản, vì nó luôn luôn làm việc JSON.parse() cho bạn.

RequireJS has a JSON plugin. Cú pháp chỉ đơn giản là:

require(['json!someData.json'], function(data){ 
    ... 
}) 
+3

cho những người tìm thấy điều này không rõ ràng, ["json!/Some/ajax/endpoint"] hoạt động tốt quá – penguat

+2

Có thể tải tệp cục bộ không? – Erik

+1

@erik Tôi thường sử dụng máy chủ web (qua gulp) để phát triển cục bộ để luôn tải URL http: // hoặc https: //. Tôi khuyên bạn nên làm như vậy. Nếu bạn đang hỏi về tệp: // URL, tôi không biết. – mikemaccana

Các vấn đề liên quan