@romashkoaleksandr

Как передать объект из php в js?

Здравствуйте.
Как правильно передавать объекты из php в js?

До недавнего времени я делал это так:
<?php
    $arr = ['a' => ['хай\nтекст с новой строки']];
?>
<script>
var obj = JSON.parse('<?=json_encode($arr,JSON_NUMERIC_CHECK)?>');
</script>


Но если объект содержит переносы строк (\n), то js выдает ошибку....
чтоб избежать ошибки, надо экранировать \, но тогда придется экранировать и \r, и т.д.

Может есть какая-то готовая функция для передачи объектов из php в js?
  • Вопрос задан
  • 736 просмотров
Пригласить эксперта
Ответы на вопрос 3
Skiphog
@Skiphog
PHP Crutch developer
Может есть какая-то готовая функция для передачи объектов из php в js?

Нет такой функции.

Если вы хотите присвоить в переменную js сразу, как в вашем случае, то JSON.parse не нужен
<script>
var obj = <?php echo json_encode($arr, JSON_NUMERIC_CHECK) ?>;
console.log(obj);
</script>
Это будет работать, но получается мешанина js и php и нельзя вынести js в отдельный файл.
Более универсально было бы подготовить данные в php, вывести в html и уже потом обработать js.

Что-то вроде такого:
Сначала html
<div id="some" data-items="<?php echo htmlspecialchars(json_encode($arr)); ?>"></div>

а в js
var data = document.querySelector('#some').dataset.items;
// и вот здесь уже понадобится JSON.parse
var obj = JSON.parse(data);
console.log(obj);
Ответ написан
@DLeo13
Что за вакханалия? Делай запросы к бэку с js через http.
Ответ написан
gzhegow
@gzhegow
Думал, стану умнее, когда адаптируюсь, но нет
Если хочешь сделать именно таким способом (сэкономить на запросе с клиента на сервер, особенно если он будет очччень часто делаться) то можно
> page.phtml / page.php
<template id="data">
<?php echo base64_encode(json_encode($data = 'content')); ?>
</template>

> script.js
JSON.parse(window.atob(document.getElementById('data').textContent));

Но как уже сказали можно отдавать по запросу из пыхи

GET /my.php
> my.php
<?php echo json_encode($data);
> script.js
$.get(/my, { success: function (data) { return JSON.parse(data);  }); // если jquery


или там есть fetch() еще в браузерах, которая другим синтаксисом тоже самое делает, и более стандартная и подготовленная к работе с параллельными запросами, чем jquery
Ответ написан
Ваш ответ на вопрос

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

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