我在客户的网站上构建了一个区域,显示当前播放的歌曲,通过PHP从XML文件解析。但是,我的客户希望歌曲自动刷新,而不是他必须手动刷新页面。
我使用jQuery.get()和.ajax()来解析文件,但由于XML文件的结构方式,似乎我只能将艺术家和名称压缩成一个字符串,或者当我尝试具体时它只返回[object Object]。
我甚至没有尝试过计算歌曲的长度,然后根据该长度刷新Feed。我可能没有看到,因为这对我来说显然是个问题。
非常感谢任何帮助或一般指导。
使用PHP代码的示例(显然,非AJAX):
<?php
$recentlyPlayed = simplexml_load_file('http://publicapi.streamtheworld.com/public/nowplaying?mountName=ABCDFM&numberToFetch=1&eventType=track');
$trackTitle = $recentlyPlayed->{'nowplaying-info'}[0]->property[1];
$trackArtist = $recentlyPlayed->{'nowplaying-info'}[0]->property[0];
echo "<h6>" . $trackArtist . "<span class=\"song-title\">" . $trackTitle . "</span></h6>";
?>
我尝试了几种不同的方法来实现这一点,但似乎最初的障碍是尝试使用属性而不是节点名来引用XML文件中的数据。节点的名称都相同,它们是区分它们的属性。因此,这样的代码将正确呈现,除非艺术家/歌曲标题为空白,然后它呈现第三个字段,其类型为加密命名为“cue_time_start”。
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
<script type="text/javascript">
$(document).ready(function() {
setInterval("songPull()",1000);
});
function songPull() {
$.get(
"http://publicapi.streamtheworld.com/public/nowplaying?mountName=ABCDFM&numberToFetch=1&eventType=track",
"xml",
function(data) {
$(data).find("nowplaying-info").each(function(){
var artist = $(this).find("property").eq(0).text();
var title = $(this).find("property").eq(1).text();
$('body').html("<h1>" + artist + "<small class=\"song-title\">" + title + "</small></h1>");
console.log (artist);
console.log (title);
});
}
);
}
</script>
<body>
</body>
在尝试做这类事情时,任何有关最佳实践的指导,建议或示例都会非常感激。
答案 0 :(得分:1)
我不确定这是否是你想要的,但你可以简单地使用属性选择器从XML文档中提取你想要的数据。
$.get("http://publicapi.streamtheworld.com/public/nowplaying?mountName=KROXFM&numberToFetch=1&eventType=track",
"xml",
function(data) {
var $nowPlaying = $(data).find('nowplaying-info');
console.log($nowPlaying.find('[name=track_artist_name]').text());
console.log($nowPlaying.find('[name=cue_title]').text());
}
);
此外,永远不要将string
传递给setInterval
或setTimeout
,您只需直接传递函数参考:
setInterval(songPull ,1000);