简体   繁体   English

实现另一个功能以在“ onSongEnd”上运行

[英]Implementing another funtion to be run “onSongEnd”

A kind person on here has helped me put together a script that: 一位好心人帮助我整理了一个剧本,该剧本:

1: Gets some data from my database 1:从数据库中获取一些数据

2: Display some information on the screen 2:在屏幕上显示一些信息

3: Get the time a song began began, get the duration of the song in seconds and create a countdown timer to refresh the page 3:获取开始歌曲的时间,获取歌曲的持续时间(以秒为单位),并创建一个倒数计时器以刷新页面

The data comes from MySql Database, its basically a history list that shows what song is currently playing and what has played before it (the metadata contained concists of artist, title, date_played, duration etc.... 数据来自MySql数据库,它基本上是一个历史列表,该列表显示当前正在播放的歌曲以及之前播放的歌曲(元数据包含艺术家,标题,播放的日期,持续时间等内容的概要信息...

Now my question is: 现在我的问题是:

How can i add a function to also run when it is time to refresh the playlist 当我需要刷新播放列表时,如何添加要运行的功能

for now i would like to just add a test function to alert("extra function added"); 现在,我只想向alert("extra function added");添加一个测试功能alert("extra function added");添加了alert("extra function added"); I would expect the screen to alert this message each time there is the PHP request for new data. 我希望每次有新数据的PHP请求时,屏幕都会提醒此消息。

I have tried many attempts but im always creating functions and then calling them in the wrong area of the code so i wont bore you experts with the mess. 我已经尝试了许多尝试,但是我总是创建函数,然后在代码的错误区域中调用它们,这样我就不会为您带来麻烦。

Thanks for reading... if you could shed some light it would really help me understand correct procedures. 感谢您的阅读...如果您能提供一些帮助,那将真的帮助我理解正确的程序。

Here is the script. 这是脚本。

var PlayList = function (onUpdate, onError)
{
    // store user callbacks
    this.onUpdate = onUpdate; 
    this.onError  = onError;

    // setup internal event handlers
    this.onSongEnd = onSongEnd.bind (this);

    // allocate an Ajax handler
    try
    {
        this.ajax = window.XMLHttpRequest
            ? new XMLHttpRequest()
            : new ActiveXObject("Microsoft.XMLHTTP");
    }
    catch (e)
    {
        // fatal error: could not get an Ajax handler
        this.onError ("could not allocated Ajax handler");
    }
    this.ajax.onreadystatechange = onAjaxUpdate.bind(this);



    // launch initial request

//ADDED CODE
onSongEndWrapper();
//END ADDED CODE

    this.onSongEnd ();

    // ------------------------------------------
    // interface
    // ------------------------------------------

    // try another refresh in the specified amount of seconds
    this.retry = function (delay)
    {
        setTimeout (this.onSongEnd, delay*5000);
    }

    // ------------------------------------------
    // ancillary functions
    // ------------------------------------------
    // called when it's time to refresh the playlist
    function onSongEnd ()
    {
        this.ajax.open('GET', 'playlist.php',
                       true);
        this.ajax.send(null);  
    }

//ADDED CODE
function onSongEndWrapper()
{
   alert("extra function added");
   this.onSongEnd();
}    
//END ADDED CODE



    // handle Ajax request progress
    function onAjaxUpdate ()
    {       
        if (this.ajax.readyState != 4) return;
        if (this.ajax.status == 200)
        {
            // get our response
            var list = eval ('('+this.ajax.responseText+')');
            // compute milliseconds remaining till the end of the current song
            var start = new Date(list.dbdata[0].date_played.replace(' ', 'T')).getTime(); 

            var now   = (list.servertime);
            var d = start - now + 6500
                  + parseInt(list.dbdata[0].duration); 

            if (d < 0)

            {
                // no new song started, retry in 3 seconds
                d = 3000;
            }
            else
            {
                // notify caller
                this.onUpdate (list);
            }

            // schedule next refresh

//ADDED CODE
    setTimeout (onSongEndWrapper.bind(this), d);
//END ADDED CODE

        }
        else
        {
            // Ajax request failed. Most likely a fatal error
            this.onError ("Request failed");
        }       
    }
}

var list = new PlayList (playlistupdate, playlisterror);

function playlistupdate (list)
{
for (var i = 0 ; i != list.dbdata.length ; i++)
    {
        var song = list.dbdata[i];
    }
    {
        $("#list0artist").html(list.dbdata[0].artist);
        $("#list0title").html(list.dbdata[0].title);
    }
}

function playlisterror (msg)
{
    // display error message
    console.log ("Ajax error: "+msg);

    // may want to retry, but chances of success are slim
    list.retry (10); // retry in 10 seconds
}

Create a wrapper function. 创建包装函数。

setTimeout (onSongEndWrapper.bind(this), d);

function onSongEndWrapper()
{
   alert("extra function added");
   this.onSongEnd();
}

To start on onload add 要开始onload添加

document.body.addEventListener("load", startPlayList, false);
function startPlayList()
{
   list = new PlayList (playlistupdate, playlisterror);
}

And change this: 并更改此:

var list = eval ('('+this.ajax.responseText+')');

to: 至:

var list = JSON.parse(this.ajax.responseText);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM