《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
http://blog.csdn.net/mazhaojuan/article/details/8599167
先看一下我要实现的功能界面:

这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成JSON,然后传递到前台JS文件中,JS解析JSON数据,并将数据显示在界面,主要介绍两种显示方式,显示在DropDownList控件 or 显示在动态创建的Table表中。
本文主要介绍两个地方:
1.根据学年查询学期信息的实现--JS将解析的JSON数据绑定到DropDownList框
2.显示教师信息的实现--JS将解析的JSON数据绑定到动态创建的table表中
一、首先介绍根据学年查询学期的实现过程--JS将解析的JSON数据绑定到DropDownList框
学年改变时,会引起学期的改变(这里即实现无刷新联动效果);学年、学期都存储在DropDownList列表框中。
1.添加学年的Onchange事件

学期DropDownList框的HTML代码:

2.在授课JS文件中,编写学年OnChange事件中查找学期的方法(SelectSemesterBySchYear())
注意:不要忘了在授课页面头部引入此JS文件哦!
通过此JS文件,向一般处理程序传递学年,并对传回的JSON学期信息解析,显示在学期DropDownList中。
- //根据学年ID查询相应学期信息
 - function SelectSemesterBySchYear() {
 - //获取学年下拉框的ID(value值)
 - //获取学年ID
 - var schoolyear = document.getElementById("ddlSchoolYear");
 - if ("" != schoolyear.options[schoolyear.selectedIndex].value) {
 - var getschyearvalue = schoolyear.options[schoolyear.selectedIndex].value; //得到ID
 - var getschyeartext = schoolyear.options[schoolyear.selectedIndex].text; //得到显示值
 - //绑定学年下拉列表,使用json数据
 - $.ajax({
 - type: "get",
 - url: "../handler/QuerySemesterBySchoolYear.ashx?SchoolYear=" + escape(getschyearvalue) + "&t=" + new Date().getTime(),
 - success: function (strJson) {
 - // alert(strJson);
 - //将json数据绑定到学期下拉列表
 - bindSemesterDDL(strJson);
 - },
 - error: function (XmlHttpRequest, textStatus, errorThrown) {
 - alert(XmlHttpRequest.responseText);
 - }
 - });
 - }
 - }
 
将查回的学期信息绑定到学期DropDownList框的方法
- //解析json数据,绑定学期下拉列表
 - //将json数据绑定到DropDownList
 - function bindSemesterDDL(strJson) {
 - var dataArray = eval(strJson);
 - $("#ddlSemester").empty(); //清空学期下拉框信息
 - //依次遍历传回的json每条数据
 - for (var i = 0; i < dataArray.length; i++) {
 - //传递参数
 - $("#ddlSemester").append($("<option value='" + dataArray[i].Semester + "'>" + dataArray[i].Semester + "</option>"));
 - }
 - }
 
3.一般处理程序代码
一般处理程序调用BLL层方法,根据学年查询相应学期;并对查找回的DataTable做处理,向JS传递JSON学期信息
- <%@ WebHandler Language="C#" Class="QuerySemesterBySchoolYear" %>
 - /*******************************************************************************
 - *文 件: QuerySemesterBySchoolYear.ashx
 - *作 者:mzj
 - *所属小组:评教小组
 - *文件说明:根据学年信息查询相应学期信息
 - *创建日期:2013年1月31日17:38:01
 - *修改作者:
 - *修改日期:
 - *修改描述:
 - *版 本 号:V1.0
 - *版本号变更记录:
 - ********************************************************************************/
 - using System;
 - using System.Web;
 - using System.Data;
 - using TeachSystem.BLL.TeachingBLL;
 - using TeachSystem.Entity.TeachingEntity;
 - using TeachSystem.Entity.CourseEntity;
 - using System.Text;
 - using System.Collections.Generic;
 - using System.Reflection;
 - public class QuerySemesterBySchoolYear : IHttpHandler {
 - public void ProcessRequest (HttpContext context) {
 - context.Response.ContentType = "text/plain";
 - //学年
 - string strSchoolYear = context.Server.UrlDecode(context.Request.QueryString["SchoolYear"]);
 - //校历实体
 - SchoolCalendarEntity enSchoolCalendar = new SchoolCalendarEntity();
 - enSchoolCalendar.SchoolYear = strSchoolYear;
 - //调用业务逻辑层方法,根据课程ID、学年、学期查询课程信息
 - //调用BLL层,根据学年查询相应学期信息
 - DataTable dtSemesterByYear = new CourseDistributionBLL().QuerySchoolCalenderByYear(enSchoolCalendar);
 - string strJson = DataTableToJson("SemesterJson", dtSemesterByYear);
 - context.Response.Write(strJson);
 - context.Response.End();
 - }
 - //将datatable数据转换成JSON数据的方法
 - public string DataTableToJson(string jsonName, DataTable dt)
 - {
 - StringBuilder Json = new StringBuilder();
 - Json.Append("[");
 - if (dt.Rows.Count > 0)
 - {
 - for (int i = 0; i < dt.Rows.Count; i++)
 - {
 - Json.Append("{");
 - for (int j = 0; j < dt.Columns.Count; j++)
 - {
 - Json.Append(dt.Columns[j].ColumnName.ToString() + ":\"" + dt.Rows[i][j].ToString() + "\"");
 - if (j < dt.Columns.Count - 1)
 - {
 - Json.Append(",");
 - }
 - }
 - Json.Append("}");
 - if (i < dt.Rows.Count - 1)
 - {
 - Json.Append(",");
 - }
 - }
 - }
 - Json.Append("]");
 - return Json.ToString();
 - }
 - public bool IsReusable {
 - get {
 - return false;
 - }
 - }
 - }
 
二、根据条件查询教师信息--JS将解析的JSON数据绑定到动态创建的table表中
1.显示教师信息的HTML代码
- <!--教师信息列表-->
 - <td class="teacherlist">
 - <div class="block">
 - <div class="h">
 - <span class="icon-sprite icon-list"></span>
 - <h3>
 - 教师信息列表</h3>
 - </div>
 - <div class="tl corner">
 - </div>
 - <div class="tr corner">
 - </div>
 - <div class="bl corner">
 - </div>
 - <div class="br corner">
 - </div>
 - <div class="cnt-wp">
 - <div class="cnt" style="width: 400px; height: 300px; overflow: scroll;">
 - <table class="data-table history" id="mainTable" border="0" cellspacing="0" width="400px"
 - align="center" cellpadding="0">
 - <tbody>
 - <tr>
 - <th scope="col">
 - 选择
 - </th>
 - <th scope="col">
 - 教师代码
 - </th>
 - <th scope="col">
 - 教师姓名
 - </th>
 - <th scope="col">
 - 教师所属学院
 - </th>
 - <th scope="col">
 - 职称
 - </th>
 - </tr>
 - <%--添加一条模板列--%>
 - <tr id="content" class="contentDisplay">
 - <td id="select" class="chk">
 - <input value='<%#Eval("TeacherID") %>' name="radTeacher" id="radTeacher" type="radio" />
 - </td>
 - <td id="TeacherCode" class="txt c">
 - 00154
 - </td>
 - <td id="TeacherName" class="txt c">
 - 木子山
 - </td>
 - <td id="CollegeName" class="txt c">
 - 廊坊师范学院
 - </td>
 - <td id="TeacherTitle" class="txt c">
 - 讲师
 - </td>
 - </tr>
 - </tbody>
 - </table>
 - </div>
 - </div>
 - </div>
 - </td>
 
2.给查询教师的按钮,添加OnClick事件

3.在授课JS文件中,编写根据条件查询教师的方法
前台JS文件会向一般处理程序传递查询教师的条件,一般处理查询调用BLL层的方法,查询出教师信息转换成JSON数据,然后传回JS,JS解析JSON,并将教师信息显示在动态添加的table表格中!
- //*********************************************单击搜索教师按钮的js事件:查询教师信息并显示在table表格中**************************//
 - //从服务器端获取教师JSON数据,并显示到界面上
 - function SetData() {
 - var CollegeID = $('#ddlCollegeTeacher option:selected').val(); //教师所属学院ID
 - var TitleID = $('#ddlTeacherTitle option:selected').val(); //教师职称ID
 - var JobID = $('#ddlTeacherJob option:selected').val(); //教师职务ID
 - var TeacherName = $('#txtTeacherName').val(); //教师姓名
 - //取得学年ID
 - var strSchoolYearID = document.getElementById("ddlSchoolYear");
 - //取得学期ID
 - var strSemesterID = document.getElementById("ddlSemester");
 - if ("" == strSchoolYearID.options[strSchoolYearID.selectedIndex].value) {
 - alert("请选择学年!");
 - } else if ("" == strSemesterID.options[strSemesterID.selectedIndex].value) {
 - alert("请选择学期!");
 - } else {
 - //学年学期都存在,查询教师
 - $.ajax({
 - type: "get", //传递类型get
 - //url一般处理程序路径及传递的参数:教师所属学院ID、教师职称ID、教师职务ID、教师姓名
 - url: "../handler/QueryTeacherInfo.ashx?CollegeID=" + CollegeID + "&TitleID=" + TitleID + "&JobID=" + JobID + "&TeacherName=" + escape(TeacherName) + "&t=" + new Date().getTime(),
 - //返回数据成功,将返回的json数据解析,显示在教师信息列表中
 - success: function (strJson) {
 - // alert(strJson); //alert出从数据库查回的数据
 - var obj = eval(strJson); //eval 计算 JavaScript 字符串,并把它作为脚本代码来执行
 - //检查后台返回的数据
 - //将获取到的数据动态的加载到table中
 - $("#mainTable tr").eq(1).removeClass("contentDisplay"); //移除模板行的样式
 - $("#mainTable tr").eq(1).nextAll().remove(); //将标题行的tr删除 这里指的是删除第二个tr
 - //依次遍历获得的json数据,向数据表table中动态加载数据
 - for (var i = 0; i < obj.length; i++) {
 - var row = $("#content").clone(); //clone clone() 方法生成被选元素的副本,包含子节点、文本和属性。
 - // 下面是闭包,立即执行函数,因未使用过暂不是用此方法 :传递参数执行SelectTeacher方法
 - //row.find("#select input").click(function () { (function () { SelectTeacher(obj[i].TeacherId, obj[i].TeacherName); })(obj[i].TeacherId, obj[i].TeacherName); });
 - //单选按钮列。单击时,传递参数,调用SelectTeacher方法
 - row.find("#select input").bind("click", { ID: obj[i].TeacherID, Name: obj[i].TeacherName }, SelectTeacher);
 - row.find("#TeacherCode").text(obj[i].TeacherCode); //教师代码
 - row.find("#TeacherName").text(obj[i].TeacherName); //教师姓名
 - row.find("#CollegeName").text(obj[i].CollegeName); //学院名称
 - row.find("#TeacherTitle").text(obj[i].TitleName); //教师职称
 - //row.css("display", "inline");
 - row.appendTo("#mainTable"); //添加到教师信息表中mainTable
 - }
 - $("#mainTable tr").eq(1).addClass("contentDisplay"); //添加模板列的css样式
 - },
 - //返回数据失败,弹出错误显示
 - error: function (XmlHttpRequest, textStatus, errorThrown) {
 - alert(XmlHttpRequest.responseText);
 - }
 - });
 - }
 - }
 
4.一般处理程序,执行查询教师信息的方法,向JS传递JSON教师信息
- <%@ WebHandler Language="C#" Class="QueryTeacherInfo" %>
 - /*******************************************************************************
 - *文 件: QueryTeacherInfo.ashx
 - *作 者:mzj
 - *所属小组:评教小组
 - *文件说明:查询教师信息,用于授课页面
 - *创建日期:2013年2月2日9:01:07
 - *修改作者:
 - *修改日期:
 - *修改描述:
 - *版 本 号:V1.0
 - *版本号变更记录:
 - ********************************************************************************/
 - using System;
 - using System.Web;
 - using System.Data;
 - using TeachSystem.BLL.TeachingBLL;
 - using TeachSystem.Entity.TeachingEntity;
 - using TeachSystem.Entity.PersonnalEntity;
 - using TeachSystem.Entity.InstitutionEntity;
 - using System.Text;
 - using System.Collections.Generic;
 - using System.Reflection;
 - using Newtonsoft;
 - using Newtonsoft.Json;
 - public class QueryTeacherInfo : IHttpHandler {
 - public void ProcessRequest (HttpContext context) {
 - context.Response.ContentType = "text/plain";
 - //context.Response.Write("Hello World");
 - //教师所属学院实体
 - CollegeEntity enCollegeTeacher = new CollegeEntity();
 - //教师所属学院ID
 - enCollegeTeacher.CollegeID = context.Request.QueryString["CollegeID"].ToString();
 - //context.Response.Write(context.Request.QueryString["CollegeID"].ToString());
 - //教师职称实体
 - TitlesEntity enTeacherTitle = new TitlesEntity();
 - //教师职称ID
 - enTeacherTitle.TitleID = context.Request.QueryString["TitleID"].ToString();
 - //教师职务实体
 - JobEntity enTeacherJob = new JobEntity();
 - //教师职务ID
 - enTeacherJob.JobID = context.Request.QueryString["JobID"].ToString();
 - //教师实体
 - TeacherEntity enTeacher = new TeacherEntity();
 - //教师姓名
 - enTeacher.TeacherName = context.Server.UrlDecode(context.Request.QueryString["TeacherName"]);
 - //调用根据组合条件查询教师的方法
 - DataTable dtTeacher = new TeachCourseBLL().QuerySimpleTeacherByGroup(enCollegeTeacher, enTeacherTitle, enTeacherJob, enTeacher);
 - //context.Response.Write(JsonConvert.SerializeObject(dtTeacher));
 - //context.Response.End();
 - string strJson = DataTableToJson("TeacherJson", dtTeacher);
 - context.Response.Write(strJson);
 - context.Response.End();
 - }
 - //将datatable数据转换成JSON数据
 - public string DataTableToJson(string jsonName, DataTable dt)
 - {
 - StringBuilder Json = new StringBuilder();
 - Json.Append("[");
 - if (dt.Rows.Count > 0)
 - {
 - for (int i = 0; i < dt.Rows.Count; i++)
 - {
 - Json.Append("{");
 - for (int j = 0; j < dt.Columns.Count; j++)
 - {
 - Json.Append(dt.Columns[j].ColumnName.ToString() + ":\"" + dt.Rows[i][j].ToString() + "\"");
 - if (j < dt.Columns.Count - 1)
 - {
 - Json.Append(",");
 - }
 - }
 - Json.Append("}");
 - if (i < dt.Rows.Count - 1)
 - {
 - Json.Append(",");
 - }
 - }
 - }
 - Json.Append("]");
 - return Json.ToString();
 - }
 - public bool IsReusable {
 - get {
 - return false;
 - }
 - }
 - }
 
至此,解析JSON数据后的两种显示方式就介绍完了!
《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中的更多相关文章
- UEditor js动态创建和textarea中渲染【原】
		
UEditor动态创建和textarea中渲染 http://ueditor.baidu.com/website/examples/textareaDemo.html <!DOCTYPE> ...
 - js之第三方工具解析JSON
		
1.JSON 仅仅是一种文本字符串.它被存储在 responseText 属性中 为了读取存储在 responseText 属性中的 JSON 数据,须要依据 JavaScript 的 eval 函数 ...
 - js写ajax并解析json
		
function down(t){ var req = createRequest(); //创建request req.open("GET","selectWord ...
 - 《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
		
先看一下我要实现的功能界面: 这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好.这个页面主要实现的是授课,即给老师教授的课程分配学生.此页面实现功能的步骤已在页面 ...
 - 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中
		
摘自:http://blog.csdn.net/mazhaojuan/article/details/8592015 通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来 ...
 - 【知识碎片】Net项目经验积累
		
后台传JSON到js报错 MVC控制器传json到前端JS"变为" 导致JS报错 重点是一定要在@ViewBag.typeJson两边加双引号,并且后台用 编码前台解码 ViewB ...
 - JS解析JSON字符串
		
问题描述:后台需要传递给前台一些数据,用于页面数据显示,因为是一些Lable标签,所以数据传递到前台需要解析. 思路:因为数据比较杂乱,所以我选择传递的数据类型是Json格式,但是数据展示时需要解析成 ...
 - JS在不同js文件中互相调用
		
例如有这样一个html,里面有一个按钮,当按下时调用b.js文件中的方法b().而b()中又要调用a.js文件中的方法a().若要实现这个功能,必须注意,将要引入的Js文件代码放在</body& ...
 - JS动态创建Table,Tr,Td并赋值
		
JS动态创建Table,Tr,Td并赋值. 成果库修改: 要求主题列表随成果类型改变而改变 网上查询资料后开工,在成果类型下拉框添加change()事件触发Dwr,查询主题集合——动态创建/编辑Tab ...
 
随机推荐
- bean的作用域
			
bean的作用域为singleton,spring容器中只存在一个bean的实例,所有对该bean的请求只返回同一个bean实例. 当bean的作用域为prototype时,每一次对bean的请求,都 ...
 - 22Mybatis_订单商品数据模型_多对多查询以及对多对多查询的总结
			
之前讲了一对一,一对多查询,这篇文章讲的是多对多. 先给出需求:查询用户及用户购买商品信息. 我们由之前的文章知道,这个需求是多对多的. 还是那个终止我们的mybatis所做的不管是之前的一对一还是一 ...
 - WPF登陆窗口、主窗口切换问题
			
代码 MainWindow mwin = new MainWindow(); Application.Current.MainWindow = mwin; this.Close(); mwin.Sho ...
 - C语言 文件操作7--文件错误处理
			
//文件错误处理 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include&l ...
 - IBatis.Net学习笔记十三:在IBatis.Net中调用存储过程
			
其实调用方式比较简单,主要也就是两种类型的存储过程:1.更新类型的存储过程2.查询类型的存储过程下面就来看看具体的调用方式:1.更新类型的存储过程sp_InsertAccount: CREATE PR ...
 - LeetCode:Populating Next Right Pointers in Each Node I II
			
LeetCode:Populating Next Right Pointers in Each Node Given a binary tree struct TreeLinkNode { TreeL ...
 - 自己写的一个关于Linq to Entity 动态查询的例子
			
这两天一直想写一个动态查询的方式,先是晚上查询了一下,发现大家写的差不多都是一样的[如:http://www.cnblogs.com/ASPNET2008/archive/2012/10/28/274 ...
 - HoloLens开发手记 - Unity之场景共享 Shared holographic experiences in Unity
			
佩戴HoloLens的多个用户可以使用场景共享特性来获取集合视野,并可以与固定在空间中某个位置的同一全息对象进行交互操作.这一切是通过空间锚共享(Anchor Sharing)来实现的. 为了使用共享 ...
 - #Linux学习笔记# Linux系统查看文件内容的命令
			
1.cat 连结多个文件的内容并显示在屏幕上:如果没有指定文件或文件名为“-”,则读取标准输入.语法如下: cat [option] ... [file] ... 常用的选项有: 选项-n:编号所有行 ...
 - 百度地图 api 功能封装类 (ZMap.js) 新增管理事件功能 [源码下载]
			
ZMap 功能说明 ZMap.js 本类方法功能大多使用 prototype 原型 实现: 包含的功能有:轨迹回放,圈画区域可编辑,判断几个坐标是否在一个圆圈内,生活服务查询,从经纬度获取地址信息,地 ...