实现一个简单的投票功能

最近项目中需要用到一个投票功能,当时觉得简单,向都没想就动手开始做,没想到走了不少弯路。

后来才发现,是想的太过简单了。来看看改进后的功能。

第一步:数据库设计

两个表:一个主表涉及投票标题,记录,以及当前投票状态,附表,主要存储投票的IP以便防止无限制投票,

这里的IP获取,网上找了一下 改了一些地方,代码如下

  var url = 'http://chaxun.1616.net/s.php?type=ip&output=json&callback=?&_=' + Math.random();
    $.getJSON(url, function (data) {
        var _Ip = data.Ip.toString();

//隐藏域赋值,可自定义
        $("#hidIP").val(_Ip);
    });

第二部:页面设计

第三部:实现逻辑:

1.获取有效的并是最新的投票数据

  var newList = db.Vote.OrderByDescending(s => s.ID).Where(s => s.VoteStatus == "1").Take(1).Select(s => new
            {
                ID = s.ID,
                VoteName = s.VoteName,
                VoteStatus = s.VoteStatus,
                Result = s.Result,
                Agree = s.Agree,
                DisAgree = s.DisAgree
            }).ToList();

2.接下来就是更新数据库,向主表中更新投票记录数,附表中则添加一条IP记录(当然的显判断IP是否已经存在)

接下来就是对数据库的操作,因为是异步,则想浏览器端返回一条记录,此处省略几个字...

第四部:异步调用:

首次加载投票记录数数据比较简单,来看点击投票的处理:

 data: { getValue: a,  Vote_IP: $("#hidIP").val() },
            success: function (list) {
                if (list != null) {
                    $.each(eval(list), function (i, item) {
                        if (item.flag === "0") {
                            var VoteName = item.VoteName;
                            var Agree = parseInt(item.Agree);
                            var DisAgree = parseInt(item.DisAgree);
                            var Count = Agree + DisAgree;
                            var agreePer = (Agree * 100) / Count;
                            var result = agreePer.toFixed(2);
                            var disagreePer = (100 - result).toFixed(2);
                            $(".f1").remove();

                            $("#VoteName").append('<span class="f1">' + VoteName + '</span>');
                            $("#tdbtn").append('<td colspan="2" class="f1" style="text-align: right;">' + Count + '人参与投票</td>');
                            $("#agree").append('<div class="f1" style="float: left; background-color: Blue; ' + result + 'px;"></div>');
                            $("#disagree").append('<div class="f1" style="float: left; background-color: Blue; ' + disagreePer + 'px;"></div>');
                            $("#agreeData").append('<span class="f1">' + result + '%</span>');
                            $("#disagreeData").append('<span class="f1">' + disagreePer + '%</span>');
                        } else {
                            $(".f2").remove();
                            $("#Notice").append('<span class="f2">一个IP只能投一次票,请不要重复投票...</span>');
                            $(".f2").fadeTo(7000, 0.0);
                            return false;
                        }
                    });

                }
            }
        });

到此结束,我看了其他的一些投票功能,我的这个写的算是最粗糙的一个,还待以后改进。

原文地址:https://www.cnblogs.com/drwu2009/p/3288689.html