2013-03-09 14 views
49

Chcę zachować dokument json do przechowywania niektórych prostych danych i chcę wymagać tego dokumentu i użyć obiektu json w rozmowie define(), aby móc z niego korzystać. To nie jest połączenie "asynchroniczne". Mam na myśli, że powinien on być przeznaczony na rozwój, ale chcę skompilować plik w wersji build, w przeciwieństwie do rzeczywistego połączenia asynchronicznego z interfejsu API, w którym zawartość jest dynamiczna.requirejs załaduj statyczny plik JSON

+0

Dokładnie jakie jest twoje pytanie? ponieważ nie widzę z tym żadnego problemu. –

+1

@ WillemD'haeseleer Cóż, nie jestem pewien, jak mam to zrobić. Nie mogę dołączyć pliku '.json' do ścieżek. – ThomasReggi

Odpowiedz

60

Najłatwiejszym sposobem na to jest użycie wtyczki json requirejs, co pozwoli ci dołączyć twój plik do kompilacji.

https://github.com/millermedeiros/requirejs-plugins
Oto przykład:

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){ 
    ... 
}) 

Jeśli chcesz dołączyć plik w r.js zbudować tak, że zawsze jest zoptymalizowana w głównym pliku bootstrap/js trzeba go dodać do opcji include:

Można również użyć wtyczki js wymagającej js, zwykle jest używana do ładowania plików szablonów, ale można jej użyć do załadowania plików .json.

https://github.com/requirejs/text

Będziesz mieć do analizowania zawartości siebie następnie JSON.parse
(obejmuje json2.js w celu zapewnienia wsparcia dla starszych przeglądarek, jeżeli jest to wymagane)

Można też owinąć JSON w jego własne określenie(), więc możesz po prostu wymagać tego tradycyjnie, ale to nie zadziała, jeśli jesteś ograniczony do rzeczywistego pliku .json.

Inną opcją jest wymaganie, aby plik tekstowy przez ajax był twoim własnym, z jquery lub czymś.

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

Poszedłem z 'requirejs-plugins' i ma on' json' plugin, którego całkowicie przeoczyłem. Używa jednak 'text' jako zależności. Więc dziękuję! Właśnie zacząłem pracować z requirejs dzisiaj w przeglądarce i jest to niesamowite. Nadal mam nadzieję, że kiedy zbuduję, przestanę używać ajaxa do pobrania dokumentu. – ThomasReggi

+0

@ThomasReggi sprawdź moją dostosowaną odpowiedź na informacje na temat tego –

+1

Mam problem z użyciem tekstu! dla treści JSON w połączeniu z r.js w celu optymalizacji. Tylko głowa. – SimplGy

8

Delegowanie to jako odpowiedź, ponieważ:

  • to, co użytkownik zadać pytanie rzeczywiście wykorzystane jako rozwiązanie
  • to czystsze patrzeć niż wymagają tekst, ponieważ zawsze robi JSON.parse() dla ciebie.

RequireJS has a JSON plugin. Składnia to po prostu:

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

dla tych, którzy uważają to za niejasne, ["json!/Some/ajax/endpoint"] również działa świetnie – penguat

+2

Czy można załadować plik lokalny? – Erik

+1

@erik Zwykle używam serwera WWW (za pośrednictwem gulp), aby rozwijać się lokalnie, więc zawsze ładuj adres URL http: // lub https: //. Poleciłbym zrobić to samo. Jeśli pytasz o adres URL pliku: //, nie wiem. – mikemaccana