none
asp.net竞拍功能 RRS feed

  • 问题

  • 需求:后台设置好上架时间后,前台的剩余时间开始倒计时,这时候多个用户同时抢拍,每点1次增加20秒,最后没有人点击抢拍的时候,最后那个人变成领取人.

    现在遇到的问题是,在本地测试开3个浏览器,IE10,Chrome,Firefox进行测试,倒计时到1秒的时候,点抢拍,会出现某个浏览器回滚倒计时,其它2个浏览器显示结束,请问如何解决?

    代码如下:

    aspx页面js:

    <script type="text/javascript">
            function SecKill(id)
            {
                $.post('./SecKill.ashx',{"id":id},function(data, status){
                    if(data=="nologin")
                    {
                        location.href="./login.aspx?myurl=seckill.aspx";
                    }
                    else if(data =="noscore")
                    {
                        alert("积分不够,请充值!");
                    }
                    else if(data =="faile")
                    {
                        alert("抢拍失败!");
                    }
                    else
                    {
                        var rsData = eval("(" + data + ")");
                        $("#person"+id)[0].innerHTML=rsData.person;
                         $("#price"+id)[0].innerHTML=rsData.price;                     
                         $("#settime"+id).attr("endTime",rsData.settime);    
                         $("#jf")[0].innerHTML=rsData.score;                     
                    }                
                });
            }
        </script>

    通过link引用的js:

    $(document).ready(function () {
        updateEndTime();
    });

    function updateEndTime() {
        //获取服务端时间
        $.post("./GetServerDate.ashx", function (data) {
            var date = new Date(data);
            var time = date.getTime();  //当前时间距1970年1月1日之间的毫秒数  
            $(".settime").each(function (i) {
                var endDate = this.getAttribute("endTime"); //结束时间字符串
                var did = this.getAttribute("did");
                //转换为时间日期类型
                var endDate1 = eval('new Date(' + endDate.replace(/\d+(?=-[^-]+$)/, function (a) { return parseInt(a, 10) - 1; }).match(/\d+/g) + ')');

                var endTime = endDate1.getTime(); //结束时间毫秒数

                var lag = (endTime - time) / 1000; //当前时间和结束时间之间的秒数
                if (lag >= 0) {
                    var second = Math.floor(lag % 60);
                    var minite = Math.floor((lag / 60) % 60);
                    var hour = Math.floor((lag / 3600) % 24);
                    var day = Math.floor((lag / 3600) / 24);
                    $(this).html(day + "天" + hour + "小时" + minite + "分" + second + "秒");
                    //在大于0的情况下,每次去检测有没有人进行竞拍
                    $.post('./GetKillPerson.ashx', { "id": did }, function (data) {
                        alert(data);
                        data = eval("(" + data + ")");
                        $("#person" + did).text(unescape(data.person));
                        if (lag < 4) {
                            $(".settime").css({ "color": "white", "background-color": "Red" });
                        }
                        else {
                            $(".settime").css({ "background-color": "white", "color": "Black" });
                        }
                        $("#settime" + did).attr("endTime", data.settime);
                    });
                }
                else if (lag <= 1) {                
                    window.location.reload();
                    $(".settime").css({ "background-color": "white", "color": "Black" });
                    $(this).html("已结束");
                    $("#lock" + did)[0].href = "javascript:void(0);"
                    $("#lock" + did).removeClass("btn1");
                    $("#lock" + did).addClass("btn2");
                    clearTimeout(updateEndTime());
                }
            });

        }
    );
        setTimeout("updateEndTime()", 1000);
    }

    2013年7月10日 7:13

答案

全部回复