Я использую файл 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, который я затем проанализирую и отобразлю в браузере?
Это невозможно. 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);
Здесь есть несколько вещей не так. Прежде всего то, что вы называете 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>