Passer une chaîne de PHP (ce qui représente une fonction JS) à travers json_encode ()
-
29-09-2019 - |
Question
J'utilise cette bibliothèque PHP / CodeIgniter pour jQuery Highcharts: http://www.crustiz.com/php-jquery/highcharts-library-for-codeigniter/
La façon dont la bibliothèque fait des choses est qu'il construit un tableau PHP d'options, puis la convertit en JSON en utilisant json_encode (voir la ligne 273 de cette bibliothèque) qui est ensuite utilisé par le plugin jQuery Highcharts. Cela est bien, sauf l'option que je suis en train d'utiliser est le formatter infobulle, qui doit être une fonction javascript, pas une chaîne (voir http://www.highcharts.com/ref/#tooltip ).
Depuis la bibliothèque ne possède pas de fonction d'info-bulle, je créé un comme un test:
function set_tooltip() {
$this->a_options['tooltip']['formatter'] = 'function() { return this.series.name + "<br>" + this.x + ": " + this.y }';
return $this;
}
Mais cela ne fonctionne pas comme la fonction JS est sortie comme une chaîne, pas une fonction. Quelqu'un sait s'il y a un moyen de faire une fonction après le passage par json_encode sans réécrire cette partie de la bibliothèque?
La solution
JSON ne vise pas à transmettre des fonctions. Si vous jetez un oeil à la documentation , il existe des spécifications que pour quatre types - objet, tableau, chaîne et numéro -. De plus, les valeurs true
, false
et null
Si vous insistez pour le faire, peut-être un article comme Envoi Javascript Fonctions Plus JSON vous donnera un coup de main.
Autres conseils
JSON n'a pas de type « de rappel de la fonction » donc je pense que cela est impossible. Il sait que les types de base : string
/ number
/ object
/ array