使用 PHP 动态生成 JavaScript

Dynamically generate JavaScript using PHP

我有这个 JavaScript 运行良好的代码:

var lookup = {
            "dog-black":{url:'images/dog-black.jpg'},
            "dog-white":{url:'images/dog-white.jpg'},
            "cat-black":{url:'images/cat-black.jpg'},
            "cat-white":{url:'images/cat-white.jpg'}
        };

我正在尝试使用 PHP 动态生成相同的代码,以使行与数据库中的行一样多,如下所示:

var lookup = {            
            <?php                   
                    $sql = "SELECT name FROM swords ORDER BY animals, colors";
                    $result = mysqli_query($conn, $sql);

                    if (mysqli_num_rows($result) > 0) {                            
                        while($row = mysqli_fetch_assoc($result)) {
                            echo '"'.$row['name'].'":{url:images/'.$row['name'].'.jpg';                                   
                        }
                    } else {echo "No records";}                    
            ?>
        };

我尝试使用引号或 heredoc 将 php 代码定义为字符串并提醒字符串变量,但似乎脚本没有执行

注意:在这部分代码之前我已经连接到数据库并向其传递数据from/to。

while循环中的echo好像有错误。您没有正确关闭字符串,它缺少结束部分 },。应该看起来像这样:

echo '"'.$row['name'].'":{url:"images/'.$row['name'].'.jpg"},';

不要尝试手动回应。您可以做的是在 PHP 中构建相同的结构,然后使用 json_encode.

JSON 实际上是有效的 JavaScript 代码,所以它会起作用。

这样试试:

<?php
    $lookup = array();

    $sql = "SELECT name FROM swords ORDER BY animals, colors";
    $result = mysqli_query($conn, $sql);

    if (mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)) {
            $lookup[$row['name']] = array('url' => 'images/'.$row['name'].'.jpg');                              
        }
    }
    else {
        //echo "No records";
    }                    
?>

var lookup = <?=json_encode($lookup); ?>;