问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于js前台获取后台传送的json字符串问题和解析,在线急等。。。

发布网友 发布时间:2022-04-07 18:43

我来回答

4个回答

懂视网 时间:2022-04-07 23:05

 先看一下我要实现的功能界面:  技术分享


    这个界面的功能在图中已有展现,课程分配(教师教授哪门课程)在之前的页面中已做好。这个页面主要实现的是授课,即给老师教授的课程分配学生。此页面实现功能的步骤已在页面中有所体现,这里不再赘述,此篇文章主要介绍:我是如何通过js从前台获取数据,然后通过ajax技术向后台一般处理程序传递JSON,后台又是如何获取传来的JSON,并对JSON数据转换,然后将转换后的数据写入数据库的!


    介绍这些步骤实现前,先说说自己的辛酸:絮叨辛酸,是因为为了实现这个功能,我真的用了很长时间!为了让用户看着舒服点,这个页面的实现我写了700多行 的JS代码和9个一般处理程序!为了避免页面刷新影响效果,又不想使用VS自带的UpdatePanel AJAX控件,感觉这个控件会带来不少后患,所以这个页面的实现我使用了大量JS代码。从后台一般处理程序向前台传递JSON,前台解析JSON并显示在 界面,这样的实现网上例子很多,非常容易实现,我也写了一篇博客来记录自己的成长,见《《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中》;而从前台向后台传递JSON用法,却让我费尽周折,最终也没找到一个完整的实例,但最后将问题分成几个步骤,然后一步步解决了!

    

   下面分享下我的经验,希望对用到此功能的战友有所帮助,当然我这样实现有什么缺陷,还希望得到高人指点!


1.界面层添加信息列表部分html代码

 

[html] view plaincopyprint?
  1. <!--添加各项列表-->  
  2.                <td class="addlist">  
  3.                    <div class="block">  
  4.                        <div class="h">  
  5.                            <span class="icon-sprite icon-list"></span>  
  6.                            <h3>  
  7.                                添加信息列表</h3>  
  8.                        </div>  
  9.                        <div class="tl corner">  
  10.                        </div>  
  11.                        <div class="tr corner">  
  12.                        </div>  
  13.                        <div class="bl corner">  
  14.                        </div>  
  15.                        <div class="br corner">  
  16.                        </div>  
  17.                        <div class="cnt-wp">  
  18.                            <div class="cnt" style="width: 450px; height: 400px; overflow: scroll;">  
  19.                                <table class="data-form" id="tabAddList" border="0" cellspacing="0" width="450px"  
  20.                                    align="center" cellpadding="0">  
  21.                                       <tbody>  
  22.                             
  23.                            <tr>  
  24.                                <th scope="row">  
  25.                                    教师名:  
  26.                                </th>  
  27.                                <td>  
  28.                                    <asp:TextBox CssClass="input-normal" ID="txtAddTeacherName" runat="server"   
  29.                                        Enabled="False"></asp:TextBox>  
  30.                                    <%--隐藏控件,保存教师id--%>  
  31.                                    <asp:HiddenField ID="hidFieldSaveTeacherID" runat="server" />  
  32.                                </td>  
  33.                            </tr>  
  34.                             <tr>  
  35.                                <th scope="row">  
  36.                                    课程名:  
  37.                                </th>  
  38.                                <td>  
  39.                                    <asp:TextBox CssClass="input-normal" ID="txtAddCourseName" runat="server"   
  40.                                        Enabled="False"></asp:TextBox>  
  41.                                    <%--隐藏控件,保存课程id--%>  
  42.                                    <asp:HiddenField ID="hidFieldSaveCourseID" runat="server" />  
  43.                                    <%--隐藏控件,保存教师、课程关系indexing--%>  
  44.                                    <asp:HiddenField ID="hidFieldSaveIndexing" runat="server" />  
  45.                                </td>  
  46.                            </tr>  
  47.                            <tr>  
  48.                                <th scope="row">  
  49.                                    选择上课班:  
  50.                                </th>  
  51.                                <td>  
  52.                                    <asp:DropDownList ID="ddlTeachClass" CssClass="input-normal" runat="server">  
  53.                                    </asp:DropDownList>  
  54.                                </td>  
  55.                                 <td>  
  56.                                   <%-- <asp:Button ID="btnAddTeachClass" runat="server" Text="添加一个上课班" OnClick="btnAddTeachClass_Click" />--%>  
  57.                                       
  58.                                      <input id="btnAddTeachClass" type="button" class="btn-lit" value="确认添加" onclick="AddTeachClass()" />  
  59.                                </td>  
  60.                            </tr>  
  61.                            <tr>  
  62.                                <th scope="row">  
  63.                                    已选授课人数  
  64.                                </th>  
  65.                                <td>  
  66.                                    <asp:TextBox CssClass="input-normal" ID="txtStuNum" runat="server"   
  67.                                        Enabled="False"></asp:TextBox>  
  68.                                </td>  
  69.                            </tr>  
  70.                            <tr>  
  71.                                <th scope="row">  
  72.                                    学生姓名列表  
  73.                                </th>  
  74.                                <td>  
  75.                                    <asp:ListBox ID="lsboxStudent" runat="server" Height="150px" Width="250px"></asp:ListBox>  
  76.                                </td>  
  77.                            </tr>  
  78.                             
  79.                            <tr>  
  80.                                <th scope="row">  
  81.                                     <br />  
  82.                                </th>  
  83.                                <td>  
  84.                                    <br />  
  85.                                     <%--<asp:Button ID="btnAddTeachCourse" class="btn-lit" runat="server" Text="确认添加"   
  86.                                        onclick="btnAddTeachCourse_Click" />--%>  
  87.                                    <input id="btnAddTeachCourse" type="button" class="btn-lit" value="确认添加" onclick="AddTeachCourse()" />  
  88.                                </td>  
  89.                            </tr>  
  90.                        </tbody>  
  91.                                </table>  
  92.                                 
  93.                            </div>  
  94.                        </div>  
  95.                    </div>  
  96.                </td>  


选择完学年学期、教师、课程、学生后,点击"确认添加"按钮,执行"添加授课信息"事件!

         技术分享

2.通过JS获取前台授课数据,并向后台一般处理程序传递

 

[javascript] view plaincopyprint?
  1. //*******************************************授课点击事件******************************************//  
  2. //添加授课信息  
  3. function AddTeachCourse() {  
  4.      
  5.     //取得教师ID  
  6.     var strTeacherID = $("#hidFieldSaveTeacherID").val();  
  7.     //alert("教师ID="+txtTeacherID);  
  8.   
  9.   
  10.     //取得课程ID  
  11.     var strCourseID = $("#hidFieldSaveCourseID").val();  
  12.     //alert("课程ID="+txtCourseID);  
  13.     //取得上课班ID  
  14.     var strTeachClassID = document.getElementById("ddlTeachClass");  
  15.     var TeachClassID = strTeachClassID.options[strTeachClassID.selectedIndex].value; //得到ID  
  16.     //取得课程分配的ID(Indexing)  
  17.     var Indexing = $("#hidFieldSaveIndexing").val();  
  18.     //取得学生数量  
  19.     var stuNum = $("#txtStuNum").val();  
  20.   
  21.   
  22.     //取得listbox框ID  
  23.     var listStudent = document.getElementById("lsboxStudent");  
  24.     //取得listbox框中元素长度  
  25.     var lstStuLength = listStudent.options.length;  
  26.     //    var objJsons="";  
  27.     //    var StuArrayObj = new Array(); //创建一个数组,存储学生ID  
  28.     // StuArrayObj[i] = StudentID; //向数组中添加学生ID  
  29.   
  30.     //*******************以下是:转换json对象的过程*************************//  
  31.     var StuArrayObjs = [];  //定义一个空串  
  32.     for (var i = 0; i < lstStuLength; i++) {  
  33.   
  34.         var StudentID = listStudent.options[i].value; //取得学生ID  
  35.   
  36.         var StuArrayObj = {};       //定义一个空对象,存入数据依次写入空串  
  37.         StuArrayObj["TeacherID"] = strTeacherID;             //教师ID  
  38.         StuArrayObj["CourseID"] = strCourseID;     //课程ID  
  39.         StuArrayObj["TeachClassID"] = TeachClassID;      //上课班ID  
  40.         StuArrayObj["Indexing"] = Indexing;              //课程分配ID  
  41.         StuArrayObj["StuNum"] = stuNum;       //学生数量  
  42.         StuArrayObj["StudentID"] = StudentID;         //学生ID  
  43.   
  44.         StuArrayObjs.push(StuArrayObj);  
  45.   
  46.     }  
  47.     var TeachCourseJsonString = JSON.stringify(StuArrayObjs);  // JSON.stringify() 转换为json串  
  48.     //    var TeachCourseJson = eval("(" + TeachCourseJsonString + ")");  //转换为json对象  
  49.     //    alert(TeachCourseJson[1].TeacherID);  
  50.     //下面$.getJSON 可以传递成功,只是这样传递不能传递过长字符串  
  51.     ////    $.getJSON("../handler/AddTeachCourse.ashx", { TeachCourseJson: TeachCourseJsonString }, function (data) {  
  52.     ////        alert(data);  
  53.     ////    });  
  54.     //与AJAX交互,向一般处理程序传递json字符串数组,并返回结果  
  55.     $.post("../handler/AddTeachCourse.ashx", { TeachCourseJson: TeachCourseJsonString }, function (data) {  
  56.         alert(data);  
  57.     });  
  58.   
  59.     }  


以上有几个需要注意的地方:

   2.1.转换JSON串使用

[javascript] view plaincopyprint?
  1. JSON.stringify()  

   2.2.JS向一般处理程序传递JSON使用

 

[javascript] view plaincopyprint?
  1. //与AJAX交互,向一般处理程序传递json字符串数组,并返回结果  
  2.    $.post("要使用的一般处理程序路径", { TeachCourseJson: TeachCourseJsonString }, function (data) {  
  3.        alert(data);  
  4.    });  


3.一般处理程序解析JS传递过来的Json数据,并进行解析,写入DataTable中,然后写入数据库

   

[csharp] view plaincopyprint?
  1. <%@ WebHandler Language="C#" Class="AddTeachCourse" %>  
  2. /******************************************************************************* 
  3.  *文    件:AddTeachCourse.ashx 
  4.  *作    者:mzj 
  5.  *所属小组:评教小组 
  6.  *文件说明:添加授课信息 
  7.  *创建日期:2013年2月6日17:57:01 
  8.  *修改作者: 
  9.  *修改日期: 
  10.  *修改描述: 
  11.  *版 本 号:V1.0 
  12.  *版本号变更记录:      
  13. ********************************************************************************/  
  14. using System;  
  15. using System.Web;  
  16. using System.Collections.Generic;  
  17. using System.Linq;  
  18. using System.Data;  
  19.   
  20. //json使用命名空间  
  21. using Newtonsoft.Json;  
  22. using Newtonsoft.Json.Linq;  
  23.   
  24. using Newtonsoft.Json.Converters;  
  25.   
  26. using System.IO;  
  27. using System.Text;  
  28.   
  29. using TeachSystem.BLL.TeachingBLL;  
  30. using TeachSystem.Entity.TeachingEntity;  
  31.   
  32.   
  33. public class AddTeachCourse : IHttpHandler  
  34. {  
  35.   
  36.     public void ProcessRequest(HttpContext context)  
  37.     {  
  38.         context.Response.ContentType = "text/plain";  
  39.    
  40.           
  41.         //创建一个名为ds_StuTeacherCourse的DataSet  
  42.         //(用于存放表:学生、教师、课程关系表,学生、上课班关系表,课程分配上课班关系表)  
  43.         DataSet dsStuTeacherCourse = new DataSet("ds_StuTeacherCourse");  
  44.         //手动创建的新数据表-学生、教师、课程关系数据表  
  45.         DataTable dtAddStudentTeaherCourse = new DataTable("dt_AddStudentTeaherCourse"); //创建一个名为dt_AddStudentTeaherCourse的DataTalbe  
  46.         //为dt_AddStudentTeaherCourse表内建立Column(表头),添加数据列:StudentID,Indexing,IsAvailable  
  47.         dtAddStudentTeaherCourse.Columns.Add(new DataColumn("StudentID", typeof(string)));  
  48.         dtAddStudentTeaherCourse.Columns.Add(new DataColumn("Indexing", typeof(int)));  
  49.         dtAddStudentTeaherCourse.Columns.Add(new DataColumn("IsAvailable", typeof(string)));  
  50.   
  51.         //手动创建的新数据表-学生、上课班关系数据表  
  52.         DataTable dtAddStudentTeachClass = new DataTable("dt_AddStudentTeachClass"); //创建一个名为dt_AddStudentTeachClass的DataTalbe  
  53.         //为dt_AddStudentTeachClass表内建立Column(表头),添加数据列:StudentID,TeachClassID,IsAvailable  
  54.         dtAddStudentTeachClass.Columns.Add(new DataColumn("StudentID", typeof(string)));  
  55.         dtAddStudentTeachClass.Columns.Add(new DataColumn("TeachClassID", typeof(string)));  
  56.         dtAddStudentTeachClass.Columns.Add(new DataColumn("IsAvailable", typeof(string)));  
  57.   
  58.         //手动创建的新数据表-课程分配、上课班关系数据表  
  59.         DataTable dtAddCourseTeachClass = new DataTable("dt_AddCourseTeachClass"); //创建一个名为dt_AddStudentTeachClass的DataTalbe  
  60.         //为dt_AddCourseTeachClass表内建立Column(表头),添加数据列:TeachClassID,Indexing,IsAvailable  
  61.         dtAddCourseTeachClass.Columns.Add(new DataColumn("TeachClassID", typeof(string)));  
  62.         dtAddCourseTeachClass.Columns.Add(new DataColumn("Indexing", typeof(int)));  
  63.         dtAddCourseTeachClass.Columns.Add(new DataColumn("IsAvailable", typeof(string)));  
  64.         dtAddCourseTeachClass.Columns.Add(new DataColumn("OddEven", typeof(string)));  
  65.         dtAddCourseTeachClass.Columns.Add(new DataColumn("StuNum",typeof(int)));  
  66.           
  67.         //获取前台传递过来的授课JSON字符串数组  
  68.         string ss = context.Request.Form["TeachCourseJson"];  
  69.         //反序列化获取的JSON字符串数组  
  70.         JArray javascript = (JArray)JsonConvert.DeserializeObject(ss);  
  71.         //依次遍历反序列化的json字符串数组  
  72.         for (int i = 0; i < javascript.Count; i++)  
  73.         {  
  74.             //将一个个反序列化的JSON字符串数组转换成对象,并将转换后的对象的值依次赋给各变量  
  75.             JObject obj = (JObject)javascript[i];  
  76.             string strTeacherID = obj["TeacherID"].ToString();                 //教师ID  
  77.             string strCourseID = obj["CourseID"].ToString();                   //课程ID  
  78.             string strTeachClassID = obj["TeachClassID"].ToString();           //上课班ID  
  79.             int intIndexing = Convert.ToInt32(obj["Indexing"].ToString());     //课程分配ID  
  80.             int intStuNum = Convert.ToInt32(obj["StuNum"].ToString());         //授课学生人数  
  81.             string strStudentID = obj["StudentID"].ToString();                 //学生ID  
  82.   
  83.             //添加学生、教师、课程关系信息表的新行  
  84.             DataRow drAddStudentTeaherCourse = dtAddStudentTeaherCourse.NewRow();//注意这边创建dt的新行的方法。指定类型是DataRow而不是TableRow,然后不用new直接的用创建的DataTable下面的NewRow方法。  
  85.             //学生、教师、课程关系信息表对应的各列值  
  86.             drAddStudentTeaherCourse["StudentID"] = strStudentID;         //学生ID  
  87.             drAddStudentTeaherCourse["Indexing"] = intIndexing;           //课程分配ID  
  88.             drAddStudentTeaherCourse["IsAvailable"] = "是";  
  89.             dtAddStudentTeaherCourse.Rows.Add(drAddStudentTeaherCourse);  //将一整条数据写入表中  
  90.   
  91.             //添加学生、上课班关系信息表的新行  
  92.             DataRow drAddStudentTeachClass = dtAddStudentTeachClass.NewRow();//注意这边创建dt的新行的方法。指定类型是DataRow而不是TableRow,然后不用new直接的用创建的DataTable下面的NewRow方法。  
  93.             //学生、上课班关系信息表对应的各列值  
  94.             drAddStudentTeachClass["StudentID"] = strStudentID;             //学生ID  
  95.             drAddStudentTeachClass["TeachClassID"] = strTeachClassID;       //上课班ID  
  96.             drAddStudentTeachClass["IsAvailable"] = "是";  
  97.             dtAddStudentTeachClass.Rows.Add(drAddStudentTeachClass);  //将一整条数据写入表中  
  98.   
  99.         }  
  100.          
  101. 热心网友 时间:2022-04-07 20:13

    对于这个 ,需要用 jquery.json-2.js 去解析http://www.jb51.net/article/19366.htm

    热心网友 时间:2022-04-07 21:31

    $.ajax({
    url: "../Login/Decryption",
    type: "post",
    //data: { o: resultSend, key: screctKey },
    cache: false,
    //async: false,
    success: function (text) {
    alert(JSON.stringify(text));

    },
    error: function (jqXhr, textStatus, errorThrown) {
    alert(jqXhr.responseText);
    }
    });

    热心网友 时间:2022-04-07 23:05

    action.result.json对象名.属性
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
门?049期父母欲其改娶五字金口决,开是什么特号生肖 支付宝怎么把银行卡的钱转到余额里呢? 下载wampserver5,安装并启动后不能启用apache、mysql的功能,请问这是怎... wampserver安装多个版本phpmysqlapache 四季豆有哪些吃法值得推荐? 四季豆牛肉馅饼的家常做法是什么? 香煎四季豆豆腐饼怎么做好吃 腾讯会议没声音怎么修复-腾讯会议没有声音修复办法 西安市高新区所有幼儿园 西安高新第二初级中学学区有哪些小区 午可以加什么偏旁组成什么字? (午)字加个偏旁都有那些字? 《抵达之谜》中黑龙江80年代赵小龙结局是什么? 中午的午加一个偏旁是什么字 五花肉烧苦瓜的做法,五花肉烧苦瓜怎么做好吃 “午”字加什么偏旁成为一个新字?念什么? 午字偏旁的字 午加个偏旁是什么字? 腹便便的拼音,成语大腹便便的解释 “午”加什么偏旁可以组哪些词? 中午的午加什么部偏旁部首可以组成一个字 大腹便便在词语字典当中是什么意思 午字可加哪些偏旁部首是什么 雏鹰贷款上征信吗?不还会咋样? 午字加什么偏旁念字? 菠萝咕噜肉有什么美味而且不会腻的制作方法? 雏鹰贷款借款额度有多少,借款流程是怎样的 雏鹰贷款,是真的么?! 午加什麽偏旁组成什么字?跟您 “午”字可加哪些偏旁部首? 唐城和李冬冬结局 午字加偏旁变成新字 我在百度上面安装了一个微信美颜视频的软件扣了68块但是运用不了?_百度问一问 午字加偏旁组成新字 午字加偏旁组成新字除了许还有什么 “大腹便便”正确读音是什么? 午字加偏旁组成新字再组词 除了《亲爱的,热爱的》,李现还有多少待播的影视剧? 午加偏旁组词 大腹便便怎么读 苦瓜煮五花肉的做法有哪些? 什么是大腹便便 午加什么部首变成新字 大腹便便的成语故事简短的 还不是情侣可以看抵达之谜吗? 普惠快捷是正规公司吗? vivox9PS可以下载微信美颜视频吗付费的 李现获“最令人失望男演员”,他因为哪部剧导致评价不好? 近十年来获得诺贝尔文学奖的作品 李现在陆垚知马俐里面扮演什么角色