J'essaie de créer un fichier de constantes commun à partager entre php et javascript, en utilisant JSON pour stocker les constantes. Mais je me demande pourquoi passer le code JSON de PHP à javascript à l'aide de json_encode()
sur l'écho de la déclaration json.
Disons que j'ai le JSON PHP
<?php
$json_obj = '{"const1": "val",
"const2": "val2"
}';
?>
Googler, il semble que la façon typique de revenir à javascript utilise
<?php echo json_encode($json_obj); ?>
Ensuite, je crois que je devrais utiliser quelque chose comme $.getScript()
pour lire le fichier php afin d’obtenir $json_obj
, puis utiliser parseJSON()
pour le rendre utilisable en javascript.
Mais pourquoi pas à la place
<?php echo 'var json = '.$json_obj; ?>
De cette façon, tout ce que vous avez à faire est de charger le script directement et vous avez le JSON prêt à être utilisé directement.
Existe-t-il une raison particulière pour laquelle il est plus favorable d'utiliser json_encode()
que de simplement renvoyer la déclaration à javascript?
Dans votre cas, $json_obj
est déjà une chaîne. Donc ce n'est pas nécessaire. Mais si vous avez un tableau que vous souhaitez transmettre à javascript json_encode
, cela vous aidera.
Tout dépend de ce que vous voulez envoyer du serveur au client - que ce soit une donnée (JSON) ou un code.
Deux approches:
Écho d'un fichier JSON sur un serveur - vous imprimez votre document JSON et définissez la réponse Content-Type
sur application/json
. De cette façon, vous pouvez utiliser n’importe quelle bibliothèque AJAX de votre choix, telle que $.get
ou raw XMLHttpRequest
etc. C'est un moyen de transmettre des données.
Écho un code Javascript sur un serveur, puis utilisez $.getScript
pour le charger. C'est une façon de passer du code. Ceci est potentiellement moins sécurisé, car votre code peut contenir non seulement JSON, mais également tout code arbitraire. Donc, si l'attaquant peut compromettre votre serveur, il pourra peut-être envoyer du code à n'importe quel client pour une exécution à distance.
Si vous souhaitez ne transmettre que des données, optez pour la première approche. C'est plus propre et plus sûr.
De plus, si vous finissez par écrire frontend dans un environnement différent, par exemple un langage de programmation différent, vous serez en mesure de réutiliser le même point de terminaison renvoyant JSON. Ce sera plus difficile si vous retournez du code Javascript.
Passage de PHP JSON en Javascript et lecture var stuff = <?php print json_encode($datajson); ?>;
var arr = new Array();
arr= JSON.parse(stuff);
document.write((arr[0].cust_code );
Même si cela peut sembler excessif pour votre problème particulier, je choisirais toujours l'option json_encode/parse. Pourquoi? tu demandes. Eh bien, considérez cela comme un moyen d'éviter les doubles emplois. Si vous encodez/analysez vous pouvez garder les constantes dans un objet facilement lisible par votre code PHP. Et la même chose pour votre code JS.
Cela élimine simplement le besoin de le tripoter.
L'argument de json_encode()
doit être une structure de données PHP, et non une chaîne déjà au format JSON. Vous l'utilisez lorsque vous voulez transmettre un objet PHP à Javascript.
json_encode
est une fonction qui convertit un tableau PHP en chaîne JSON, et rien de plus. Étant donné que votre variable $json_obj
est déjà une chaîne JSON, aucune conversion supplémentaire n'est nécessaire et vous pouvez simplement la renvoyer en écho.
Pour obtenir votre chaîne $json_obj
à partir d'un tableau, votre code aurait ressemblé à ceci
$json_array = array(
"const1" => "val",
"const2" => "val2"
);
$json_obj = json_encode($json_array);
D'habitude c'est ce que je fais, le moyen le plus sûr que j'ai trouvé:
// holds variables from PHP
var stuff = {};
try {
// stuff will always be an object
stuff = JSON.parse('<?php echo empty($stuff) ? '{}' : json_encode($stuff) ?>');
} catch (e) {
if (e instanceof SyntaxError)
{
// report syntax error
console.error("Cannot parse JSON", e);
}
}
// show resulting object in console
console.log("stuff:", stuff);
constant.php
<?php
$array = array("const1" => "val", "const2" => "val2");
?>
<script>
var contants = <?php echo json_encode($array); ?>
</script>
FIN DU FICHIER ========================= constant=php
En php, vous pouvez accéder en utilisant
$array["<key>"]
En javascript, vous pouvez accéder en utilisant
contants.const1, ....
Vous utilisez json_encode
si vous utilisez un tableau php et non une chaîne:
$array = array("const1" => "val", "const2" => "val2");
echo json_encode($array);
si vous appelez json_encode sur une chaîne, vous obtiendrez:
"{\"const1\": \"val\", \"const2\": \"val2\"}"