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...