我在客户的网站上建立了一个区域,显示当前正在播放的歌曲,通过 PHP 从 XML 文件中解析。但是,我的客户希望歌曲自动刷新,而不是手动刷新页面。
我尝试使用 jQuery.get() 和 .ajax() 解析文件,但由于 XML 文件的结构方式,似乎我只能将艺术家和名称压缩成一个字符串,或者当我尝试具体化时,它只返回 [object Object]。
我什至没有尝试过计算歌曲的长度,然后根据该长度刷新提要。我可能看不到,因为这对我来说显然是个问题。
任何帮助或一般指导将不胜感激。
示例工作 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>
在尝试做此类事情时,任何指导、建议或最佳实践示例将不胜感激。