web-dev-qa-db-fra.com

requirejs charge un fichier JSON statique

Je veux conserver un document json pour stocker des données simples et je veux exiger ce document et utiliser l'objet json dans un appel à define() pour pouvoir l'utiliser. Ce n'est pas un appel "asynchrone". Je veux dire que cela devrait être pour le développement mais je veux compiler le fichier sur la construction contrairement à un appel asynchrone réel à partir d'une API, où le contenu est dynamique.

51
ThomasReggi

La façon la plus simple de le faire est d'utiliser le plugin requirejs json pour cela, cela vous permettra également d'inclure votre fichier dans la build.

https://github.com/millermedeiros/requirejs-plugins
Voici un exemple:

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

Si vous souhaitez inclure le fichier dans votre build r.js afin qu'il soit toujours optimisé dans le fichier principal/js bootstrap vous devez l'ajouter à l'option include

Vous pouvez également utiliser le plugin texte js requis pour cela, il est généralement utilisé pour charger des fichiers de modèle, mais vous pouvez également l'utiliser pour charger des fichiers .json.

https://github.com/requirejs/text

Vous devrez analyser le contenu vous-même puis avec JSON.parse
(Inclure json2.js pour fournir une assistance pour les anciens navigateurs si nécessaire)

Vous pouvez également envelopper le json dans son propre define () afin que vous puissiez simplement l'exiger traditionnellement, mais cela ne fonctionnera pas si vous êtes limité à un fichier .json Réel.

Une autre option est d'exiger le fichier texte via ajax vous-même, avec jquery ou quelque chose.

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

Publier ceci une réponse, car:

  • c'est ce que l'utilisateur qui pose la question est réellement utilisé comme solution
  • il est plus propre de regarder que d'exiger du texte, car il fait toujours le JSON.parse () pour vous.

RequireJS a un plugin JSON. La syntaxe est simplement:

require(['json!someData.json'], function(data){
  ...
})
9
mikemaccana