我正在使用一个需要从同一服务器上托管的javscript文件中读取静态json对象的phtml文件。
我实际访问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 :(得分:1)
这是不可能的。 PHP在服务器上运行,而JS在客户端上运行。您最好的机会是从文件中删除ns.path.VARIABLE
部分,并使用file_get_contents()
将其作为实际的JSON文件读取
实施例
<强> 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 :(得分:0)
这里有一些问题。首先,你所谓的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>