.net 返回前端json数据

来源:互联网 发布:淘宝 主营 在哪里填写 编辑:程序博客网 时间:2024/05/16 09:39

1.需求
允许.net后端创建json数据,通过response.write()方式动态的回应ajax请求数据,并通过js动态的刷新到页面上。
2.实现方法
2.1前端ajax对于数据的请求和返回json字符串的处理。

//前台获取后台测评参数信息文件jsonfunction get_data() {    var type = "Get_Para_Info";    var year = $('.old_select select').eq(0).find('option:selected').text();    var season = $('.old_select select').eq(1).find('option:selected').text();    $.ajax({        type: 'get',        url: '../new/ajax/ajaxHander.aspx?type=' + type + '&year=' + year + '&season=' + season,        eache: false,        success: function (reg) {            var jsonobj = eval("{(" + reg + ")}");            var str;            for (var i = 0; i < jsonobj.length; i++) {            str += "<tr class=\"add_row\">";            str += "<td class=\"td1\">" + jsonobj[i].TCK_CATE + "</td>";            str += "<td class=\"td1\">" + jsonobj[i].WEIGHT + "</td>";            str += "<td class='del'>" + "</td>";            str += "</tr>";            }            $('.box1 table tbody').append(str);        },        error: function () {            alert("未能查找到数据");                }            })        }

2.2后端构建json字符串

//获取ajax操作类型信息_type = q("type");Get_Para_Info();
/// <summary>/// 返回前端json数据/// </summary>public void Get_Para_Info(){    int EVA_YEAR = int.Parse(q("year"));    int EVA_SEASON = int.Parse(q("season"));    Test_BUL.CPCSB bul = new Test_BUL.CPCSB();    DataTable dt = bul.GetModelList(EVA_YEAR, EVA_SEASON);    StringBuilder jsonString = new StringBuilder();    if (dt.Rows.Count > 0)    {        int i = 0;        jsonString.Append("[");        for (; i < dt.Rows.Count - 1; i++)        {            jsonString.Append("{\"TCK_CATE\":\"" + dt.Rows[i]["TCK_CATE"].ToString() + "\",");            jsonString.Append("\"WEIGHT\":" + "\"" + dt.Rows[i]["WEIGHT"].ToString() + "\"" + "},");         }            jsonString.Append("{\"TCK_CATE\":\"" + dt.Rows[i]["TCK_CATE"].ToString() + "\",");            jsonString.Append("\"WEIGHT\":" + "\"" + dt.Rows[i]["WEIGHT"].ToString() + "\"" + "},");        jsonString.Append("]");    }    Response.Write(jsonString.ToString());}

3.一些需要注意的问题和解决方案
3.1就像我以前写的前端往后端传送json字符串一样,你也可能需要传送单个json实体和一组json实体,可能说在ajax中success对于返回的字符串的转为json就会有差异。
对于单个的实体字符串转换,我使用的方法是:var right = JSON.parse(reg);
实际上转换的方法有很多,在这一步遇到困难可以尝试多种方法,当然前提是你正确的接受到了json字符串数据。
3.2这一点教训其实和本章主题并不相关,只是我对于ajax中错误的一点体会。
ajax中的参数有一条为datatype,当你将其设为json后,如果返回的是后台查询错误的提示,例如response.write(“查询失败!”);ajax会认为返回的并不是预期的数据类型,进入error。
3.3这点体会算是在后面做别的模块发现的小细节,.net其实是可以多次返回数据,举个例子,你可以在后端通过response.write()多次传送数据。
在这里我仅提出一些个人的理解,我们通过ajax方式请求数据,其实本质上说是一个浏览器向web服务器发送请求的过程,这里我理解是http通信。感兴趣的同学可以去查一下http通信的特点,这里我仅仅只是简单提一下“无连接”性,每一次请求都是客户端发起,服务器响应后,在关闭连接,换句话说,我们的整个请求都是在一次连接过程中发生的,这就是为什么我们可以在一次请求中多次返回,却不会多次ajax请求只返回一次数据。