1.需求
允许.net后端创建json数据,通过response.write()方式动态的回应ajax请求数据,并通过js动态的刷新到页面上。
2.实现方法
2.1前端ajax对于数据的请求和返回json字符串的处理。
//前台获取后台测评参数信息文件json
function 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请求只返回一次数据。