dss89001 2014-08-25 20:17
浏览 46
已采纳

刷新歌曲标题而不重新加载整个页面

I'm building a Shoutcast audio player with the information of the song/artist being played. I have two separate variables ($song and $artist) and their values are updated every time the song changes.

Here is an extract of the code:

<?php

$ip = "111.111.111";
$port = "9436";

$fp = @fsockopen($ip,$port,$errno,$errstr,1);
if (!$fp) 
    { 
    echo "Streaming offline momentaneamente"; // Displays when sever is offline
    } 
    else
    { 
    fputs($fp, "GET /7.html HTTP/1.0
User-Agent: Mozilla

");
    while (!feof($fp)) 
        {
        $info = fgets($fp);
        }
    $info = str_replace('</body></html>', "", $info);
    $split = explode(',', $info);
    if (empty($split[6]) )
        {
        echo "Streaming offline"; // Displays when sever is online but no song title
        }
    else
        {
        $title = str_replace('\'', '`', $split[6]);
        $title = str_replace(',', ' ', $title);
        $split = explode(' - ', $title);
        $artist = trim($split[0]);
        $song = trim($split[1]);
        }


    }

function truncate($string, $length, $dots = "...") {
    return (strlen($string) > $length) ? substr($string, 0, $length - strlen($dots)) . $dots : $string;
}

?>

<div class="player-item-ref acdc">
    <a class="player-link" href="#">
        <h2>AC/DC</h2>
        <ul><!-- THIS UL CONTAINS THE ITEMS TO BE REFRESHED -->
            <li class="song-title"><?php echo truncate("$song", 35); ?></li>
            <li class="song-artist"><?php echo truncate("$artist", 38); ?></li>
        </ul>
    </a>
</div><!-- /.player-container -->

I tried a 5 seconds refresh in JavaScript but it affects the whole page (including the player). I would to make a function which refresh these variables without reloading the whole page.

  • 写回答

1条回答 默认 最新

  • douhuzhi0907 2014-08-25 20:39
    关注

    All you need is in your question's tags: JavaScript, PHP and AJAX.

    You need this things:

    1. create an endpoint in PHP, which returns just song/artist information, for example formatted in JSON or XML
    2. put JavaScript code in your page with the player, which periodically (for example once in 1 or 5 seconds) calls endpoint from point 1 (using for example JavaScript function XMLHttpRequest) and replace part of DOM, which contains song/artist information (probably DIV/SPAN with some ID)

    That's all. That two things together are called AJAX. That abbreviation originally means Asynchronous JavaScript and XML, but you can use also JSON or plain HTML as response from your endpoint, not just XML. AJAX isn't a real thing, it's just a nickname for technique of asynchronous calls in JavaScript.

    In a dumbest way: imagine you have this in your HTML page with a player:

    <div>Now playing: <span id="now_playing"></span></div>

    Create a JavaScript code, which will be executed each 1 second, it will call PHP script you have posted in your question, which returns currently played song as text without any other content (just "Artist - Song") and JavaScript code will put it (overwrite previous content) into span#now_playing. That's all.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效