Php YouTube API动态加载视频

Php YouTube API动态加载视频,php,javascript,mysql,youtube-api,Php,Javascript,Mysql,Youtube Api,-我想在一个页面上加载很多视频,没有什么特别的 -视频ID存储在数据库->$slide['message'] -我可以让它只加载一个视频。其他为空 -它在一个循环中,当kind==youtube时,它会尝试将视频放入其中。 if($slide['kind'] == 'youtube'){ ?> <li> <div class="info<?php echo $count+1; ?>"> <h1><?php echo $slide['ti

-我想在一个页面上加载很多视频,没有什么特别的
-视频ID存储在数据库->$slide['message']
-我可以让它只加载一个视频。其他为空
-它在一个循环中,当kind==youtube时,它会尝试将视频放入其中。

if($slide['kind'] == 'youtube'){
?>
<li>
<div class="info<?php echo $count+1; ?>">
<h1><?php echo $slide['title']; ?></h1>
<div id="ytplayer<?php echo $count+1; ?>" class="youTube-viewer"></div>
<script>
var video = '<?php echo $slide['message']; ?>';
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/player_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var player;
function onYouTubePlayerAPIReady() {
player = new YT.Player('ytplayer<?php echo $count+1; ?>', {
height: '365',
width: '648',
videoId: video,
playerVars: {
'rel': 0,
'enablejsapi': 1,
}
});
}
</script>
<h2><?php echo $slide['name']; ?></h2>  
</div>
</li>
<?php
}
if($slide['kind']=='youtube'){
?>

  • 如果整个代码块都在一个循环中,那么它会因为循环本身而失败。假设你有4个视频要插入…因为你加载YT API javascript库的代码在循环中,你会加载它4次。因为你的回调函数在循环中,你会定义它4次,每次都会覆盖以前的定义以及引用视频的对象。由于回调函数引用视频,因此只有列表中的最后一个视频具有持续存在的回调函数,因此我猜插入的是该视频

    tl;dr——问题不在API中,而在编程结构中

    也许您可以像这样重新组织代码:

     // DON'T START YOUR LOOP YET
        <script>
        var tag = document.createElement('script');
        tag.src = "https://www.youtube.com/player_api";
        var firstScriptTag = document.getElementsByTagName('script')[0];
        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
        function onYouTubePlayerAPIReady() {
        // START YOUR LOOP HERE
    <?php
    if($slide['kind'] == 'youtube'){
    ?>
            var player<?php echo $count+1 ?>;
        var video = '<?php echo $slide['message']; ?>';
        player<?php echo $count+1 ?> = new YT.Player('ytplayer<?php echo $count+1; ?>', {
        height: '365',
        width: '648',
        videoId: video,
        playerVars: {
        'rel': 0,
        'enablejsapi': 1,
        }
        }); // CODE CONTINUES ON FROM HERE, EVENTUALLY ENDING THE LOOP, PUTTING IN THE HTML
    
    //先不要启动循环
    var tag=document.createElement('script');
    tag.src=”https://www.youtube.com/player_api";
    var firstScriptTag=document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(标记,firstScriptTag);
    函数onYouTubePlayerAPIReady(){
    //从这里开始循环
    var播放器;
    var视频=“”;
    player=新的YT.player('ytplayer'{
    高度:'365',
    宽度:“648”,
    视频ID:video,
    playerVars:{
    “rel”:0,
    “enablejsapi”:1,
    }
    });//代码从这里继续,最终结束循环,放入HTML
    

    等等等等。请注意,我认识到我的代码无效;我只是指出,您的循环应该位于onYouTubePlayerAPIReady中,并且您需要为每个视频创建一个单独的播放器对象。(好吧,您不需要……您可以采用不同的策略,利用API的其他方面……但考虑到您现有的情况,这是最简单的。)正如上面的一位评论者所指出的,如果您使用代码创建一个JSFIDLE,人们可以更容易地帮助您对其进行微调,从而将此方法付诸实践。

    使用jlmcdonald给我的提示,我让它开始工作,请参见下面的FIDLE链接


    这段代码很难理解。你有没有办法把它塞进一个JSFIDLE并重现你的问题让我们大家都看到?谢谢你的评论,今天是我第一次听说JSFIDLE,我一定会去看看,它看起来是一个非常有用的工具。你的见解非常有用。
    <script>
    var tag = document.createElement('script');
    tag.src = "//www.youtube.com/iframe_api";
    var firstScriptTag = document.getElementsByTagName('script')[0];
    firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
    
    var player;
    
    function onYouTubeIframeAPIReady() {
      player = new YT.Player('player', {
        height: '250',
        width: '500',
        videoId: 'u1zgFlCw8Aw',
        events: {}
      });
    
      player = new YT.Player('player2', {
        height: '250',
        width: '500',
        videoId: 'u1zgFlCw8Aw',
        events: {}
      });
    
      player = new YT.Player('player3', {
        height: '250',
        width: '500',
        videoId: 'u1zgFlCw8Aw',
        events: {}
      });
    
    }
    
    </script>
    
    <div id="player"></div>
    <div id="player2"></div>
    <div id="player3"></div>
    
    <div id="player"></div>
    etc...
    
      player = new YT.Player('player', {
        height: '250',
        width: '500',
        videoId: 'u1zgFlCw8Aw',
        events: {}
      });
    etc...