Я использую файл 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>