从phtml文件访问Javascript命名空间

时间:2014-11-17 20:16:37

标签: javascript php json require

我正在使用一个需要从同一服务器上托管的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,我将解析并呈现给浏览器?

2 个答案:

答案 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>