繁体   English   中英

PHP json 到 HTML 文件中的 JavaScript 变量

[英]PHP json to a JavaScript variable inside an HTML file

我编写了以下脚本,为当前文件夹下的所有图像创建了一个漂亮的 JSON:

<?php
header('Content-type: application/json');

$output = new stdClass();
$pattern="/^.*\.(jpg|jpeg|png|gif)$/i"; //valid image extensions

$dirs = array_filter(glob('*'), 'is_dir');
foreach ($dirs as $dirname) {
  $files = glob(''.$dirname.'/*');
  $images = preg_grep($pattern, $files);
  
  $output->{$dirname} = $images;
}

echo json_encode($output, JSON_PRETTY_PRINT);
?>

我有一个带有基本页面的 HTML 文件,我想在一些 javascript 操作后以格式化的方式显示 JSON 的数据。

所以问题是如何将 PHP 数据放入 javascript 变量中?

<html>
    ...
    <body>
        <script src="images.php"></script>
        <script type="text/javascript">
            // Desired: Get access to JSON $output
        </script>

        ...

        <div>
          <img ... >
        </div>

    </body>
</html>

我试图将https://stackoverflow.com/a/61212271/1692261https://stackoverflow.com/a/50801851/1692261都放在那个脚本标签中,所以我猜想它们里面没有一些基本的东西在这里(我第一次体验 PHP :)

您应该专注于需要做的事情,但目前您正在尝试实施自己的想法。 也许你应该改变你的方法并以另一种方式做你想做的事? 将 php 变量传递给 js 是可能的。 但是你为什么需要这个 json? 如果您想使用它来生成 html(fe 向用户显示图像),您可以在没有 js 的纯 php 上执行此操作。 如果您确实需要 json 您可以使用 php 生成 json 文件,并通过额外的 js 请求获取此文件。 但最简单的方法是

// below php code that generates json with images
$images = json_encode($output, JSON_PRETTY_PRINT);
...
// php code but in html template
<script type="text/javascript">
   var images = "<?= $images ?>";
</script>

我不能保证这条 js 行会起作用,但你明白了)

PS您不需要为此目的使用stdClass。 我们通过 arrays 来实现(在你的情况下它将是关联数组),arrays 在 php 中非常强大。 json_encode() 将从数组或 object 生成相同的 json。 但是如果这部分代码工作正常,让它保持原样

我接受了@Zeusarm 的建议,只使用了 ajax (和 jquery)。

对于其他需要参考的人:

  1. 原始帖子中的 PHP 脚本没有任何改变。
  2. 使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>将 jquery 添加到 HTML 文件中
  3. 发出这样的 GET 请求:
        <script type="text/javascript">
          var images = ''
          $.get('images.php',function (jsondata) {
            images = jsondata
          });

我确信这不是最干净的代码,但它可以工作:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM