JS用于播放蜂鸣声,通知无法按预期工作

时间:2015-04-07 16:05:22

标签: javascript html5 audio get

我有一个脚本执行ajax调用以接收来自某个页面的通知。回调函数中收到的数据是 整数(0,1,2,3 ...) 只是查询中选择的行数。请在下面的说明中找到我正在使用的查询。

我正在使用以下JS:

            function myFunction() {
                $.get("AjaxServicesNoty.aspx", function (data) {
                    var recievedCount = data;
                    var existingCount = $("lblEventCount").text();

                    if (existingCount == "") {
                        $(".lblEventCount").html(recievedCount);
                        $(".lblAcceptedCount").html(recievedCount);
                        var sound = new Audio("Sound/notificatonSound.wav"); // buffers automatically when created
                        sound.play();
                    }

                    else if (parseInt(recievedCount) > parseInt(existingCount)) {
                        $(".lblEventCount").html(recievedCount);
                        $(".lblAcceptedCount").html(recievedCount);
                        var sound = new Audio("Sound/notificatonSound.wav"); 
                        sound.play();
                    }

                    else {
                        $(".lblEventCount").html(existingCount);
                        $(".lblAcceptedCount").html(existingCount);
//                        var sound = new Audio("Sound/notificatonSound.wav"); 
//                        sound.play();
                    }
                });
            }
            setInterval(myFunction, 3000);

声音播放正常 现在 。现在,当setInterval()函数被调用时,即使根据我的if-else条件,每三秒钟仍会发出蜂鸣声。它不应该这样玩。它应该只在有新的更新时播放。

我使用了以下查询:

public int getAcceptedCount(int CustomerID)
        {
            string query = @"SELECT Status
                            FROM    tblEventService
                            WHERE   EventID IN  (SELECT EventID FROM tblEvent WHERE (CustomerID = @cid)) AND (Status = 'Accepted' OR Status = 'Rejected')";

            List<SqlParameter> lstP = new List<SqlParameter>();

            lstP.Add(new SqlParameter("@cid", CustomerID));

            DataTable dt = DBUtility.SelectData(query, lstP);

            if (dt.Rows.Count > 0)
            {
                return dt.Rows.Count;
            }
            else 
            {
                return 0;
            }
        }

查询选择StatusAccepted or Rejected的所有行。因此,如果有任何新的Accepted or Rejected事件,则计数会增加。因此JS应该播放通知声音!

我在这里做错了什么?

2 个答案:

答案 0 :(得分:0)

浏览器正在http://localhost:40825/EventManagement/Sound/notificationSound.wav查找声音文件。这听起来像路径是错误的,你在JS中引用它的方式是在JS文件所在的文件夹中查找名为Sound的文件夹(EventManagement)。

这个Sound文件夹到底在哪里?如果它是EventManagement文件夹的兄弟,请尝试new Audio("../Sound/notificatonSound.wav");。否则,我只是在EventManagement文件夹中移动该文件夹和音频:)

答案 1 :(得分:0)

我认为代码中的问题是if if语句if (existingCount == "")。如果您的exisitingCount应为整数,则无需对此进行测试,否则,只要您的exisitingCount等于0,您的声音就会播放。

但是,如果有时你可以获得一个空字符串,那么你可以优化代码并删除第一个条件,并在开始测试之前解析所有数据:

        function myFunction() {
            $.get("AjaxServicesNoty.aspx", function (data) {
                var recievedCount = parseInt(data);
                var existingCount = parseInt($("lblEventCount").text());

                if ( recievedCount > existingCount ) {
                    $(".lblEventCount").html(recievedCount);
                    $(".lblAcceptedCount").html(recievedCount);
                    var sound = new Audio("Sound/notificatonSound.wav"); 
                    sound.play();
                } else {
                    $(".lblEventCount").html(existingCount);
                    $(".lblAcceptedCount").html(existingCount);
                }
            });
        }
        setInterval(myFunction, 3000);