2013-03-09 14 views
49

Desidero conservare un documento json per archiviare alcuni dati semplici e desidero richiedere questo documento e utilizzare l'oggetto json in una chiamata define() in modo da poterlo utilizzare. Questa non è una chiamata "asincrona". Voglio dire che dovrebbe essere per lo sviluppo, ma voglio compilare il file su build a differenza di una chiamata asincrona effettiva da un'API, in cui il contenuto è dinamico.requirejs carica file JSON statico

+0

Esattamente qual è la tua domanda allora? perché non vedo alcun problema con quello. –

+1

@ WillemD'haeseleer Beh, non sono sicuro di come dovrei farlo. Non riesco a includere un file '.json' nei percorsi. – ThomasReggi

risposta

60

Il modo più semplice per farlo è utilizzare il plugin requirejs json per questo, questo ti permetterà di includere anche il tuo file nella build.

https://github.com/millermedeiros/requirejs-plugins
Ecco un esempio:

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

Se si desidera includere il file nel r.js costruire in modo che sia sempre ottimizzato nel file di bootstrap principali/js bisogna aggiungerlo all'opzione di inclusione

Si potrebbe anche utilizzare il necessario js text plugin per questo, in genere viene utilizzato per caricare i file di modello ma è possibile utilizzarlo per caricare anche i file .json.

https://github.com/requirejs/text

Si dovrà analizzare il contenuto vostra auto poi con JSON.parse
(Include json2.js per fornire il supporto per i browser meno recenti, se quello che serve)

Si potrebbe anche avvolgere il JSON in esso la propria definire() in modo da poterlo richiedere tradizionalmente, ma ciò non funzionerà se si è limitati a un file .json effettivo.

Un'altra opzione è richiedere il file di testo tramite ajax, con jquery o qualcosa del genere.

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

Sono andato con 'requirejs-plugins' e ha un plugin' json' che ho completamente trascurato. Tuttavia usa 'text' come dipendenza. Quindi grazie! Ho appena iniziato a lavorare con requirejs oggi sul browser ed è fantastico. Spero ancora che quando costruisco smetterà di usare ajax per recuperare il documento. – ThomasReggi

+0

@ThomasReggi controlla la mia risposta adattata per informazioni su quello –

+1

Ho problemi con l'utilizzo del testo! per contenuti JSON se combinato con r.js per l'ottimizzazione. Solo un avviso. – SimplGy

8

questo distacco di una risposta, perché:

  • è ciò che l'utente pone la domanda effettivamente utilizzato come soluzione
  • è più pulita da guardare che richiede il testo, dal momento che fa sempre la JSON.parse() per te.

RequireJS has a JSON plugin. La sintassi è semplicemente:

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

per coloro che trovano questo poco chiaro, ["json!/Some/ajax/endpoint"] funziona molto bene – penguat

+2

È possibile caricare il file locale? – Erik

+1

@erik Normalmente utilizzo un web server (tramite gulp) per svilupparlo localmente, quindi carica sempre un URL http: // o https: //. Ti consiglierei di fare lo stesso. Se stai chiedendo del file: // URL, non lo so. – mikemaccana