如何在PHP中使用JavaScript变量?

时间:2013-02-14 22:38:37

标签: php javascript wordpress

我正在制作一个使用大量不同php文件的网站。我的网站使用Wordpress,是一个音乐博客。我在屏幕顶部有一个jPlayer播放列表,对于每个单独的帖子,我想要一个播放按钮来播放该歌曲。

我在php和javascript中通过一些不同的php文件制作了一些函数。如何在我的一个php文件中声明一个全局JavaScript变量并在另一个php文件中访问它?我知道措辞严厉,所以让我解释一下。

文件1: my_functions.php(我设置了jPlayer播放列表。变量song_index是我想要的全局。

<script type = "text/javascript">
    var song_index = 0;
    var theTitles = new Array();
    var theMP3s = new Array();
    var jplayer_playlist;

    function add_song(title, mp3)
    {
        theTitles[song_index] = title;
        theMP3s[song_index] = mp3;
        song_index++;
    }

    function play_song(index)
    {
        alert("You want to play song " + index);
        //jplayer_playlist.play(index);
    }

    function get_playlist()
    {
        var playlist = new Array();

        for(var i = 0; i < theTitles.length; i++)
        {
            playlist[i] = {title: theTitles[i], mp3: theMP3s[i]};
        }
        return playlist;
    }


    $(document).ready(function()
    {
        var playlist = get_playlist();
        jplayer_playlist = new jPlayerPlaylist({
            jPlayer: "#jquery_jplayer_1",
            cssSelectorAncestor: "#jp_container_1",
            oggSupport:false
        }, playlist, {
            swfPath: "/js",
            supplied: "mp3",
            wmode: "window"
        }
        );
    });
    //]]>
    </script>

这会为每个页面动态设置我的jPlayer播放列表。

文件2 shortcodes.php(这是我使用Wordpress的短代码添加歌曲的地方。以下是我想在播放列表中添加歌曲时使用的代码...)

    function player_function($args)
{
    $url = $args['url'];
    $title = $args['title'];

    if(!$title)
    {
        $title = get_the_title();
    }

    add_song($title, $url);

    $ret = "<a href = '" . $url . "'></a><br><a href=\"javascript:void(0)\" onclick = \"play_song(".$_GET['window.song_index'].")\">Play</a>";

    return "$ret";
}

我只需要从第一个文件中访问 song_index 到php变量,所以我可以传递它。正如您所看到的,我尝试使用$ _GET,因为有人说您可以通过这种方式访问​​JS变量,但它不起作用。有人有任何线索吗?

2 个答案:

答案 0 :(得分:3)

Javascript和PHP实际上并不了解彼此。但是,您可以使用PHP写入JavaScript。所以在my_functions.php中你可以这样做:

<?php
  $myGlobalSongIndex = '0'; // or however you want to assign this else....
?>
<script type = "text/javascript">
    var song_index = <?php print myGlobalSongIndex; ?>;

然后在写链接行的shortcodes.php中,打印$myGlobalSongIndex而不是您现在正在执行的$_GET['window.song_index']。您需要确定的一件事是$myGlobalSongIndex在两个地方都在范围内。如果它在函数或类中,则需要使用global关键字。

这种确切方法存在缺点。您将无法将javascript分成单独的文件,在许多情况下这可能非常好。您可以在php中编写以下内容,作为html head部分的一部分:

<?php
  $myGlobalSongIndex = '0'; // or however you want to assign this else....
?>
<script type = "text/javascript">
    var song_index = <?php print myGlobalSongIndex; ?>;
</script>

确保之后加载外部javascript文件。然后,当您在javascript文件中使用song_index时,您可能希望确保它确实已初始化为您可能包含它的任何页面而不在php中呈现该字段。

答案 1 :(得分:0)

你必须将js变量放入url查询字符串(实质上是发送GET请求,你可以从PHP访问这些变量)或使用AJAX

所以www.yoursite.com?song_index=5

或构建ajax调用并在数据中发送变量