在<script>标签中使用PHP?</script>

时间:2011-11-29 11:52:03

标签: php javascript json object

我正在尝试使用PHP在javascript中创建一个对象。这是我的剧本:

    <script>
        $(document).ready(function(){
            var genres = [
    <?php
    $last = count($userGenres) - 1;
    $i = 0;
    foreach($userGenres as $a){
        $i++;
        echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
        if($i < $last){
            echo ',';
        }
    }
    ?>
                        ];
   });
</script>

当我检查生成的源时,它会创建一个有效的对象,但该标记中的整个脚本现在不起作用。如果没有JSON,如何解决这个问题?

由于

4 个答案:

答案 0 :(得分:2)

您忘记关闭.ready()方法及其内部的匿名函数。

试试这个:

<script>
    $(document).ready(function(){
        var genres = [
            <?php
            $last = count($userGenres) - 1;
            $i = 0;
            foreach($userGenres as $a)
            {
                $i++;
                echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
                if($i < $last)
                {
                    echo ',';
                }
            }
            ?>
        ];
    });
</script>

答案 1 :(得分:0)

您的功能未正确关闭:

}
    }
    ?>
                        ];
}); // <--- add this
</script>

答案 2 :(得分:0)

此:

<script>
    $(document).ready(function(){
        var genres = [
            <?php
            $last = count($userGenres) - 1;
            $i = 0;
            foreach($userGenres as $a)
            {
                echo '{"value":"'.$a['genre'].'", "name":"'.$a['name'].'"}';
                if($i < $last)
                {
                    echo ',';
                }

                $i++;
            }
            ?>
        ];
    });
</script>

更改:您必须关闭匿名函数和ready()方法。另外,将i ++移动到最后,以便覆盖所有情况(您将丢失一个)。你得到的错误是因为你有错误的i ++。

答案 3 :(得分:0)

正如评论所说,你应该考虑使用(php函数)json_encode代替,这将转向......

php:

$a = array(
  array("gender"=> "male", "name"=> "Bob"),
  array("gender"=> "female", "name"=> "Annie")
);

Into json:
[
   {gender:"male", name:"Bob"},
   {gender:"female", name:"Annie"}
]

回应json_encode($ a)就会输出它。