• 实现一个简单的投票功能


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

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

    第一步:数据库设计

    两个表:一个主表涉及投票标题,记录,以及当前投票状态,附表,主要存储投票的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;
                            }
                        });

                    }
                }
            });

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

  • 相关阅读:
    解决:Eclipse调试的时候报错'Launching XXX' has encountered a problem. Cannot connect to VM.
    struts-tiles学习笔记
    配置taglib的uri的2种方法
    根据二叉树中序序列画出二叉树
    不要把<a href="">当作按钮用
    由于没有正确使用Connection.setAutoCommit(false)而导致SQL语句没有被提交
    由于没有发现潜在的递归导致MySQL链接数溢出:MySQLNonTransientConnectionException: Data source rejected establishment of connection, message from server: "Too many connec
    解决:eclipse配置Database Connections报错Communications link failure Last packet sent to the server was 0 ms ago
    eclipse配置代码自动补全auto-completion
    oracle 创建表空间用户
  • 原文地址:https://www.cnblogs.com/drwu2009/p/3288689.html
Copyright © 2020-2023  润新知