Je pense à intégrer un JSON arbitraire dans le DOM comme ceci :
<script type="application/json" id="stuff">
{
"unicorns": "awesome",
"abc": [1, 2, 3]
}
</script>
C'est similaire à la façon dont on peut stocker un modèle HTML arbitraire dans le DOM pour une utilisation ultérieure avec un moteur de modèles JavaScript. Dans ce cas, nous pourrions plus tard récupérer le JSON et l'analyser avec :
var stuff = JSON.parse(document.getElementById('stuff').innerHTML);
Cela fonctionne mais est-ce le meilleur moyen ? Est-ce que cela viole une norme ou une meilleure pratique ?
Note : Je ne cherche pas d'alternatives au stockage de JSON dans le DOM, j'ai déjà décidé que c'était la meilleure solution pour le problème particulier que je rencontre. Je cherche simplement la meilleure façon de le faire.
2 votes
Pourquoi ne pas l'avoir en tant que
var
en javascript ?0 votes
@Krizz, il doit faire partie d'un document statique qui est ensuite traité par une chaîne complexe de javascript encapsulé. Le stocker dans le DOM est ce que je veux faire.
0 votes
@Krizz On m'a posé un problème similaire. Je voulais mettre des données dans un site différent pour chaque utilisateur sans faire une requête AJAX. J'ai donc intégré du PHP dans un conteneur et fait quelque chose de similaire à ce que vous avez ci-dessus pour obtenir les données en javascript.
2 votes
Je pense que votre méthode originale est la meilleure en fait. Elle est 100% valide en HTML5, elle est expressive, elle ne crée pas de "faux" éléments qu'il suffira de supprimer ou de cacher avec CSS ; et elle ne nécessite aucun codage de caractères. Quel est l'inconvénient ?
26 votes
Si vous avez une chaîne de caractères avec la valeur
</script><script>alert()</script><script>
dans votre objet JSON, vous aurez des surprises. Ce n'est pas sûr, à moins de nettoyer les données d'abord.0 votes
@silviot si je devais aveuglément remplacer n'importe quelle
<
dans la chaîne JSON avec\u003C
cela suffirait-il ? Cela semble trop simple pour vraiment fonctionner...