@burtellbee

Как передать JS функцию из PHP в JavaScript в JSON массиве?

В PHP делается выборка из базы и строится массив с данными, затем кодируется в JSON и отправляется JS скрипту где затем парсится JSON и строится диаграмма Гантта, данная диаграмма работает на библиотеке moment.js.
Объект выглядит так:
tasks: [{
        "id": 1,
        "resourceId": 1,
        "label": "Задача 1",
        "from": moment("7:00", "HH:mm"),
        "to": moment("9:00", "HH:mm"),
        "classes": "orange"
    }, {
        "id": 2,
        "resourceId": 1,
        "label": "Задача 2",
        "from": moment("9:30", "HH:mm"),
        "to": moment("11:00", "HH:mm"),
        "classes": "orange"
    }]

Сейчас, я делаю так, собираю массив на PHP:
$gantt_tasks[] = [
  'id' => 1,
  'label' => 'Задача 1',
  'resourceId' => 1,
  'from' => time(),//unix timestamp - это для примера
  'to' => time(),
  'classes' => 'orange',
];
...
$gantt_output = json_encode($gantt_tasks); // это отправляется в JS

Далее в JS:
var tasks = JSON.parse(gantt_output);
// И вот здесь перебирая каждый элемент и подставляю функцию moment 
tasks.forEach( function (item) {
  item.from = moment.unix(item.from).format("DD:MM:YYYY HH:mm");
  item.from = moment(item.from, 'DD:MM:YYYY HH:mm');
  item.to = moment.unix(item.to).format("DD:MM:YYYY HH:mm");
  item.to = moment(item.to, 'DD:MM:YYYY HH:mm');
});


Могу ли я сразу из PHP передать функцию чтобы JS ее выполнил? А не отображал как строку?
  • Вопрос задан
  • 133 просмотра
Пригласить эксперта
Ответы на вопрос 4
@Mellorn
Можете.
Например, eval, или иногда может подойти Function constructor.
Но вообще лучше так не делать. Передавайте только данные, а на стороне клиента уже обрабатывайте эти данные так, как вам нужно.
Ответ написан
@rPman
Что бы ты не делал, передавать так и так тебе придется 'строки', между php и javascript сеть, куча прослоек и протоколов.

php выполняется на сервере, javascript на клиенте, между ними сеть и задержки в десятки миллисекунд, конечно из javascript можно с помощью ajax (или websocket) дергать php но это максимально не эффктивно, как минимум вызовы нужно собирать и выполнять разом пакетно, чтобы не тратить время на коммуникацию.

p.s. с помощью wasm можно на клиенте запускать php но мне кажется такой бред не нужен
Ответ написан
@vabka
Токсичный шарпист
Коротко: функцию передвть в жсоне невозможно.
Решение: можно передавать название желаемой функции и аргументы.
Но в целом это изврат
Ответ написан
@burtellbee Автор вопроса
Всем спасибо! В общем как я понял это все не к чему) и мое решение вполне работоспособно и выдумывать ничего не надо)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы