Передайте строку PHP (которая представляет функцию JS) через json_encode ()
-
29-09-2019 - |
Вопрос
Я использую эту библиотеку PHP / Codeigniter для JQuery HighCharts: http://www.crustiz.com/php-jquery/highcharts-library-for-codeigniter/
Способ того, что библиотека делает вещи, так это то, что она создает массив PHP параметров, затем преобразует его на JSON, используя JSON_ENCODE (см. Линию 273 этой библиотеки), которая затем используется плагином JQuery HighCharts. Это нормально, за исключением варианта, которую я пытаюсь использовать, - это форма подсказки, которая должна быть функцией JavaScript, а не строка (см. http://www.highcharts.com/ref/#Tooltip.).
Поскольку в библиотеке нет функции подсказки, я создал один в качестве теста:
function set_tooltip() {
$this->a_options['tooltip']['formatter'] = 'function() { return this.series.name + "<br>" + this.x + ": " + this.y }';
return $this;
}
Но это не работает, так как функция JS выводится как строка, а не функция. Кто-нибудь знает, есть ли способ иметь функцию после прохождения через JSON_ENCODE, не переписывая эту часть библиотеки?
Решение
JSON не предназначен для передачи функций. Если вы взгляните на документация, существуют только технические характеристики для четырех типов - объект, массив, строка и номер - плюс значения true
, false
и null
.
Если вы настаиваете на этом, возможно, статья, как Отправка функций JavaScript над JSON даст вам руку.
Другие советы
JSON не имеет типа «Функциональный обратный вызов», поэтому я думаю, что это невозможно. Это знает только основные типы: string
/ number
/ object
/ array