Доступ к пространству имен Javascript из файла phtml

Я использую файл phtml, который должен прочитать статический объект json из файла javscript, размещенного на том же сервере.

У меня возникли проблемы с доступом к объекту JSON, чтобы я мог манипулировать им и отображать его на экране (в конечном итоге с соответствующими привязками и т. Д.)

Вот как я пытаюсь получить доступ к объекту, но php для меня относительно новый.

<?php
require_once '/path/to/my/resource.js';
$json = ns.path.VARIABLE;
?>
<?php echo $json; ?>

И мой файл JavaScript, расположенный по адресу /path/to/my/resource.js:

ns.path.VARIABLE = {
Part1: {
'Key1': 'Value1',
'Key2': 'Value2'
}
Part2: {
'Key1': 'Value1',
'Key2': 'Value2'
}
}

У меня нет успеха. Я могу сказать, что файл js включается в ответ браузеру, но я не могу добраться до объекта VARIABLE Json.

Любая идея о том, как получить доступ к JSON, который я затем проанализирую и отобразлю в браузере?

0

Решение

Это невозможно. PHP работает на сервере, а JS — на клиенте. Ваш лучший шанс — удалить ns.path.VARIABLE часть из вашего файла, и читать его как фактический файл JSON с помощью file_get_contents() в теме

пример

resource.json

{
Part1: {
'Key1': 'Value1',
'Key2': 'Value2'
}
Part2: {
'Key1': 'Value1',
'Key2': 'Value2'
}
}

Код PHP

<?php

$json = json_parse(file_get_contents('resource.json'));

Просто как тот!

РЕДАКТИРОВАТЬ

С определенным кодом, который вы опубликовали, вы можете сделать следующее, но оно не кажется безопасным или гибким:

// Load the file as a string
$js_string  = file_get_contents('resource.js');
// Remove the namespace part so that you can parse it as a JSON string
$js_string = str_replace('ns.path.VARIABLE =', '', $js_string);
// Convert it to an associative array you can use in PHP
$array = json_decode($js_string);
1

Другие решения

Здесь есть несколько вещей не так. Прежде всего то, что вы называете JSON, на самом деле вовсе не JSON. Запустите его через такой инструмент, как http://jsonlint.com/ и ты увидишь. Правильный JSON должен выглядеть так:

{
"Part1": {
"Key1": "Value1",
"Key2": "Value2"},
"Part2": {
"Key1": "Value1",
"Key2": "Value2"}
}

Кроме того, вы смешиваете PHP и Javascript. Как уже говорили другие, JS работает в браузере, PHP работает на сервере. Вы не можете смешивать их так, как пытаетесь. Ответ @Loupax в основном правильный, но я считаю, что это можно сделать намного проще. И это не потребует, чтобы ваш включенный файл был JSON, подойдет обычный объект JS. (есть разница); Что-то вроде этого:

<script type="text/javascript">
var ns = {
path: {}
};
<?= include '/path/to/my/resource.js'; // this will just paste the contents of that file inside this script block before sending it to the browser ?>;
// here you can use that object
console.log(ns.path.VARIABLE.Part1.Key1);
</script>

Обратите внимание, что сначала я должен был создать ns объект с path объект внутри, чтобы иметь возможность назначить VARIABLE возражать против этого. Это также предполагает, что вы сохранили этот так называемый файл JSON как есть, за исключением пропущенной запятой между Part1 и Part2

Трудно сказать, просто по фрагменту вашего кода, но я думаю, что вы, вероятно, могли бы сойти с рук, просто вызвав его variableи тогда вам не придется делать этот первый шаг. Также несколько советов, старайтесь быть последовательными при именовании переменных. Общее согласие заключается в том, что классы начинаются с заглавной буквы, а функции и переменные — с заглавной, а все константы — заглавными. Вам не нужно следовать этим правилам, просто попробуйте придерживаться своего выбора. Это сделает кодирование и отладку намного проще.

В заключение мой код, вероятно, будет выглядеть примерно так:

файл / / include.js

{
part1: {
key1: 'Value1',
key2: 'Value2'
},
part2: {
key1: 'Value1',
key2: 'Value2'
}
}

view.phtml

<script type="text/javascript">
var paths = <?= include 'file/to/include.js'; ?>;
console.log(paths.part1.key1);
</script>
0

По вопросам рекламы [email protected]