zoukankan      html  css  js  c++  java
  • C#曲线分析平台的制作(一,ajax+json前后台数据传递)

    在最近的项目学习中,需要建立一个实时数据的曲线分析平台,这其中的关键在于前后台数据传递过程的学习,经过一天的前辈资料整理,大概有了一定的思路,现总结如下:

    1.利用jquery下ajax函数实现:

     <script src="Scripts/jquery-3.3.1.min.js"></script>
       <script type="text/javascript">
            function checkLogin() {
                var name = $("#name").val();
                var passward = $("#password").val();
                console.log(name);
                console.log(passward);
                $.ajax({
                    url: 'Default.aspx?method=login',
                    type: 'GET',
                    data: { "name": name, "passward": passward },
                    dataType: 'json',
                    success: function (dataInfo) {
                        if (dataInfo.status) {
                            console.log(dataInfo.data);
                            //前台接收到的数据中data是字符串,需要转换为JSON对象
                            var jsondata = JSON.parse(dataInfo.data);//反序列化
                            alert("登陆成功,用户名是:" + jsondata.name + "   性别是:" + jsondata.sex + "   年龄是:" + jsondata.age);
                        } else {
                            alert("登陆失败");
                        }
                    },
                    async: false
                });
    
            }
        </script>  
    <body>
        <form id="form1" runat="server">
        <div>
         <input id="name" type="text" />
        <input id="password" type="password" />
        
        <button onclick="checkLogin()" value="">提交</button>
        </div>
        </form>
        
    </body>

    后台脚本:

    protected void Page_Load(object sender, EventArgs e)
        {
                string method = Request.QueryString["method"];
                string name = Request.QueryString["name"];
                string passward = Request.QueryString["passward"];
                if (!string.IsNullOrEmpty(method))
                {
                    if (method == "login")
                    {
                        GetLogin(name, passward);
                    }
                }
    
            }
            private void GetLogin(string name, string passward)
            {
                
                CommonModel msg = new CommonModel();
                //这里有没有登陆成功可以连接数据库判断
                if (name == "admin" && passward == "admin")
                {
                    //这里是可以从数据库获取出来的登陆用户的信息
                    var jsonData = "{ "name":"管理员", "sex":"男", "age":"20"}";
    
                    msg.status = true;
                    msg.msg = "登陆成功";
                    msg.data = jsonData;
                }
                else
                {
                    msg.status = false;
                    msg.msg = "失败";
                }
                object JSONObj = JsonConvert.SerializeObject(msg);//序列化传递
                Response.Write(JSONObj);
                //一定要加,不然前端接收失败
                Response.End();
            }
       
        class CommonModel//构造实体类
        {
            //状态
            private bool _statues;
    
            public bool status
            {
                get { return _statues; }
                set { _statues = value; }
            }
            //消息
            private string _msg;
    
            public string msg
            {
                get { return _msg; }
                set { _msg = value; }
            }
            //数据
            private object _data;
    
            public object data
            {
                get { return _data; }
                set { _data = value; }
            }
        }

    2.利用原生javascript下的ajax:

    ajax.js

    function ajax(url, onsuccess) {
        var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');//创建xmlhttp对象,考虑兼容性
    
    
        xmlhttp.open("POST", url, true);//准备向服务器发出post请求
        xmlhttp.onreadystatechange = function () {
            if (xmlhttp.readyState == 4)    //readyState==4表示服务器返回数据了额,之前可能经历  2(请求已发生,正在处理中)3表示(响应中有部分数据可以用,拂去其还没有完成响应的生成)
            {
                if (xmlhttp.status == 200)  //状态码200位成功
                {
                    //responseText是服务器返回的报文正文
                    onsuccess(xmlhttp.responseText);
                }
                else {
                    alert("ajax服务器返回错误");
                }
            }
        }
        xmlhttp.send();//这时才发送请求,发送完请求,并一定马上服务器响应,然后看上面的onreadystatechange状态,发送完继续执行下面的操作,不等服务器
    }

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
       
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        
        <script type="text/javascript" src="js/ajax.js"></script>
        <script type="text/javascript">
            function zan() {
                var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');//创建xmlhttp对象,考虑兼容性
                xmlhttp.open("POST", "AjaxTest.ashx?action=Zan", true);//准备向服务器发出post请求
                xmlhttp.onreadystatechange = function () {
                    if (xmlhttp.readyState == 4)    //readyState==4表示服务器返回数据了额,之前可能经历  2(请求已发生,正在处理中)3表示(响应中有部分数据可以用,拂去其还没有完成响应的生成)
                    {
                        if (xmlhttp.status == 200)  //状态码200位成功
                        {
                            document.getElementById("ZanCount").innerHTML = xmlhttp.responseText;//responseText是服务器返回的报文正文
                        }
                        else {
                            alert("ajax服务器返回错误");
                        }
                    }
                }
                xmlhttp.send();//这时才发送请求,发送完请求,并一定马上服务器响应,然后看上面的onreadystatechange状态,发送完继续执行下面的操作,不等服务器
            }
    
    
            function cai() {
                ajax("AjaxTest.ashx?action=Cai", function (reText) {
                    document.getElementById("CaiCount").innerHTML = reText;
                })
            }
        </script>
    
    
        <title></title>
          
    </head>
    <body>
        <video src="src/a.mp4" controls="controls"></video>
        <p><input type="button" name="Zan" value="赞" onclick="zan()" /><label id="ZanCount"></label></p>
        <p><input type="button" name="Cai" value="踩" onclick="cai()" /><label id="CaiCount"></label></p>
    </body>
    </html>


    新建应用程序AjaxTest.ashx

    <%@ WebHandler Language="C#" Class="Handler" %>
    
    
    using System;
    using System.Web;
    using System.Data;
    
    
    public class Handler : IHttpHandler {
    
    
        
        public void ProcessRequest (HttpContext context) {
            string action = context.Request["action"];
           
            if (action == "Zan")
            {
    
    
                SqlHelper.ExecuteNonQuery("Update T_ZanCai set ZanCount=ZanCount+1");
                int zanCount = (int)SqlHelper.ExecuteScalar("select top 1 ZanCount from T_ZanCai");
                context.Response.Write(zanCount);
            }
            else
            {
                SqlHelper.ExecuteNonQuery("Update T_ZanCai set CaiCount=CaiCount+1");
                 int caiCount = (int)SqlHelper.ExecuteScalar("select top 1 CaiCount from T_ZanCai");
                context.Response.Write(caiCount);
            }
        }
     
        public bool IsReusable {
            get {
                return false;
            }
        }
    
    
    }
    
    
    


    数据库结构:


    注:

    1.数据库连接webconfig下connectionstring

    <connectionStrings>
        <add name="dbConn" connectionString="Data Source=.;Database=test;Trusted_Connection=false;User ID=sa;Password=" providerName="System.Data.SqlClient"/>
      </connectionStrings>

    2.简单的测试SqlHelper类的编写:



       

     private static string connStr = ConfigurationManager.ConnectionStrings["dbConn"].ConnectionString;
        public static int ExecuteNonQuery(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql; 
    
    
                    //foreach (SqlParameter  param in parameters)
                    //{
                    //    cmd.Parameters.Add(param);
                    //}
                   // cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteNonQuery();
                }
            }
        }
    
    
        public static object ExecuteScalar(string sql)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
    
    
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sql;
                   // cmd.Parameters.AddRange(parameters);
                    return cmd.ExecuteScalar();
                }
            }

    结果如下:


    备注:本文代码非原创:

    分别借鉴如下博客进行修改实现。

    点击打开链接

    点击打开链接

  • 相关阅读:
    设计模式之 观察者模式
    设计模式之 模板方法模式
    设计模式之 状态模式
    设计模式之 策略模式
    设计模式之 桥接模式
    设计模式之 外观模式
    设计模式之 代理模式
    设计模式之 装饰者模式
    设计模式之 适配器模式
    设计模式之 组合模式
  • 原文地址:https://www.cnblogs.com/cache-yuan/p/9218449.html
Copyright © 2011-2022 走看看