《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中

2023-05-16


先看一下我要实现的功能界面:



    这篇文章主要介绍:后台一般处理程序把从数据库查找的数据,转换成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数据后的两种显示方式就介绍完了!

    

    

  


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中 的相关文章

  • centos系统中php Curl 无法访问https ,更换ssl_version NSS为openssl

    在centos 6上面 curl模块的ssl 支持默认为NSS xff0c 涉及到的程序里有https xff0c 是需要双向认证的 xff0c 这时使用NSS会报错 所以需要更换为openssl 一 查看系统自带的curl的版本 root
  • python-求三角形的面积

    计算三角形的面积 法一 xff1a 计算三角形的面积 a 61 float input 39 输入三角形第一边长 xff1a 39 b 61 float input 39 输入三角形第二边长 39 c 61 float input 39 输
  • 如何把达梦8数据库安装在root用户下管理

    达梦数据库一般安装在dmdba用户下 xff0c 官方文档也是这么推荐的 那么有没有办法不创建dmdba用户 xff0c 直接安装在root下呢 xff1f 希望我不要把大家带偏 xff0c 只是本着研究学习的心态 xff0c 做个实验 结
  • The word 'localhost' is not correctly spelled 这个问题怎么解决

    有时工程中有下划线并提示 The word is not correctly spelled 此问题是MyEclipse校验单词拼写造成 xff0c 如果出在配置文件中 xff0c 一般会影响到程序的正常执行 解决方法 xff1a 在MyE
  • Seaship数据集+yolov5

    在SeaShip数据集上验证YoloV5 操作系统 xff1a ArchLinux 需要代理 1 conda安装配置 已经完成的小伙伴可以直接跳过 安装Anaconda yay安装 yay S anaconda 激活Anaconda环境 s
  • 对抗样本生成方法学习总结

    title 对抗样本生成方法 date 2023 03 21 15 08 46 tags pytorch 对抗样本 cover https s2 loli net 2023 03 20 TkeiAjqp3Jdg9tI png categor
  • 划词翻译简单实现

    环境 xff1a archlinux xff0c 其余linux系统类似 安装依赖 span class token function sudo span pacman S xsel span class token function su
  • 平凡的人生or开挂的人生——对知乎相关问题的回答

    知乎原题 xff1a 为什么有些人的人生和开了挂一样 xff1f https www zhihu com question 37106162 楼上说的都特别好 xff0c 我很想补充一点 我先抛出一个背景概念 我认为开挂人生 xff0c 本
  • ARM64启动过程分析

    文章目录 arm64启动过程分析arm64启动过程分析 xff08 一 xff09 boot protocolarm64启动过程分析 xff08 二 xff09 内核启动第一步arm64启动过程分析 xff08 三 xff09 创建启动阶段
  • Android Studio: Kotlin使用DataBinding异常

    异常 Error 7 30 Unresolved reference databinding E test Android Jetpack app src main java com mazaiting jetpack architectu
  • H5C3__元素垂直居中的方法

    在 CSS 中对元素进行水平居中是非常简单的 xff1a 如果它是一个行内元素 xff0c 就对它的父元素应用 text align center 如果它是一个块级元素 xff0c 就对它自身应用 margin auto 还有没有其他的方法
  • 2013年期中总结 2013年9月10日20:17:49

    题目中的时间 xff0c 我改了几次 xff0c 一直在想这半年来的经历 xff0c 我想我是成长着的吧 xff01 继上次总结 2012年年度总结 2013年2月25日21 49 44 xff0c 眨眼过去了半年 xff0c 细细想来这半
  • VMware安装Ubuntu20.04.5常见问题及解决方案

    文章目录 使用Xftp连接ubuntu系统ubuntu上安装指定版本nodejsubuntu设置连网ubuntu安装Java8ubuntu安装 deb格式软件ubuntu卸载 deb格式软件ubuntu中electron框架安装的缓存在如下
  • 关于行业代码对应表的数据库设计及导入(4位行业代码)

    最近使用asp net 43 sqlserver 43 layui前端框架完成了一个小页面 xff0c 其中有一个功能是需要将行业代码表导入倒数据库 看到这个行业代码表 xff0c 刚开始还真是无从下手 xff0c 经过查询找到一个页面是关
  • 当你不想学习的时候,来看看大脑是怎么想的《摘抄与所想》

    尽管科学家一个接一个的科研成果让我们对记忆有了越来越多的了解 xff0c 但直到今天 xff0c 科学家所发现的所谓大脑的秘密也只是冰山一角 xff0c 在很大程度上 xff0c 大脑和记忆仍是神秘的 研究人员认为 xff0c 记忆是一个过
  • English learning method ---学英语重中之重打通“任督二脉”

    漫漫十年艰辛路 xff0c 英语学习之旅 曾经秉承 路漫漫其修远兮 xff0c 吾将上下而求索 的信念 xff0c 初一那年了解到原来 xff08 a b c d e f g xff09 不仅仅读作 xff08 啊 xff0c 波 xff0
  • DRP过后,感受知识间的通性

    DRP视频看了不短的时间 xff0c 真正开始DRP的时间是7月17号 xff0c 至今两个月了 由于暑假期间英语的学习占得时间比较多 xff0c 所以DRP视频进行的很慢 9月11号看完了DRP所有的视频 xff0c 这个项目完成后最大的
  • English learning method ---我谈音标学习

    最近在想这样一个问题 xff1a 每个地方都有自己的方言 xff0c 有些方言我们完全听不懂 xff0c 但是他们当地人却可以交流的很好 xff1b 而非本地人说方言 xff0c 就要模仿他们的腔调 xff0c 模仿的多了说出来的味也就像了
  • English learning method ---如何加强听力

    在之前的一篇博客 English learning method 学英语重中之重打通 任督二脉 中主要讲述的是听力的重要性 xff0c 在这篇博客中主要讲述如何加强听力 学习理论 语言学习始于听 xff0c 小孩首先通过近两年的听来学习语言
  • 电脑软件--开机提示ntldr is missing的原因和解决方法

    早上一朋友打电话来说 xff1a 你赶紧帮我问问老师 xff0c 我这电脑开始提示ntldr丢失该怎么解决 xff0c 这是公司电脑 xff0c 最好不要重装系统 我一听 xff0c 感觉她不相信我的能力 xff0c 跟她解释 xff1a

随机推荐