AJAX JSON的数据传输

2023-10-26

AJAX的JSON引入

先看一个案例:用户点击按钮之后,发送AJAX请求,显示部门列表。
前端代码

<html>
  <head>
    <meta charset="UTF-8">
    <title>ajax dept</title>
  </head>
  <body>
  <script type="text/javascript">
    window.onload = function (){
      document.getElementById("btn").onclick = function (){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
          if (this.readyState == 4) {
            if (this.status == 200) {
              document.getElementById("deptbody").innerHTML = this.responseText
            }else {
              alert(this.status)
            }
          }
        }
        xhr.open("GET","/ajax_dept/ajaxdept",true)
        xhr.send()
      }
    }
  </script>
  <input type="button" value="显示部门列表" id="btn">
  <table width="50%" border="1px">
    <tr>
      <th>部门编号</th>
      <th>部门名称</th>
      <th>部门位置</th>
    </tr>
    <tbody id="deptbody">
    <!--到时候输出的是以下形式-->
      <!--<tr>
        <td>10</td>
        <td>销售部</td>
        <td>上海</td>
      </tr>
      <tr>
        <td>20</td>
        <td>研发部</td>
        <td>广州</td>
      </tr>-->
    </tbody>
  </table>
  </body>
</html>

后端

@WebServlet("/ajaxdept")
public class AjaxDeptServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try {
            conn = DButil.getConnection();
            String sql = "select * from t_dept;";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            while (rs.next()){
                out.print("<tr>\n" +
                        "        <td>"+rs.getString("deptno")+"</td>\n" +
                        "        <td>"+rs.getString("dname")+"</td>\n" +
                        "        <td>"+rs.getString("loc")+"</td>\n" +
                        "      </tr>");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DButil.close(conn,ps,rs);
        }
    }
}

DButil是JDBC工具类
结果
请添加图片描述
显然在后端java程序中拼接HTML代码,然后将HTML代码直接响应到浏览器客户端。
后端不应该在java代码中编写HTML代码,会变得不好维护。
这时候可以在后端拼接JSON格式的字符串,或者XML格式的字符串,将这个字符串发送给前端,前端解析即可。

javascriptJSON对象创建和访问

javascript怎么创建JSON对象

属性值的类型随意,可能为数字、布尔类型、字符串、数组、JSON对象。。。
var json对象名字 = {“属性名1” :属性值1,“属性名2”:属性值2 …}
例如 var user = {"usercode":111,"username":"zhangsan","aihaos":{"打游戏","喝酒","抽烟"},"sex":true,"addr":{"city":"广州","street":"广州天河区"}}

javascript访问JSON

  • 第一种方式 json对象名字.属性名

    user.usercode
    如果是JSON对象就继续’.': user.addr.city
    如果是数组就进行遍历:for(var i = 0;i<user.aihaos.length;i++)user.aihaos[i]

  • 第二种方式 json对象名字[“属性名”]

    与上面差不多

javascript字符串转换成JSON对象

AJAX请求从后端响应回来的是一串字符串,javascript怎么把拼接JSON格式的字符串转换成JSON对象。
例如var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
它是一串JSON格式的字符串,需要把它转换成JSON对象

  • 第一种方式:使用eval函数。
    eval() 函数计算或执行参数。
    如果参数是表达式,则 eval() 计算表达式。如果参数是一个或多个 JavaScript 语句,则 eval() 执行这些语句。
    由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
    这里只演示转换JSON:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>演示JSON</title>
</head>
<body>
<script type="text/javascript">
    window.onload = function () {
        var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
        //由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
        var eval1 = eval('('+jsonStr+')');
        alert(eval1.username)
    }
</script>
</body>
</html>

请添加图片描述

  • 第二种方法:调用javascript语言种的内置对象JSON的一个方法parse
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>演示JSON</title>
</head>
<body>
<script type="text/javascript">
    window.onload = function () {
        var jsonStr = "{\"username\" : \"zhangsan\", \"password\" : \"1233344\"}"
        var josnObj = JSON.parse(jsonStr);
        alert(josnObj.username)
    }
</script>
</body>
</html>

请添加图片描述

对案例进行改造,使用json传输

html

<html>
  <head>
    <meta charset="UTF-8">
    <title>ajax dept</title>
  </head>
  <body>
  <script type="text/javascript">
    window.onload = function (){
      document.getElementById("btn").onclick = function (){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function (){
          if (this.readyState == 4) {
            if (this.status == 200) {
              var json = JSON.parse(this.responseText);//是一个数组,并且数组有多个部门数据
              var html = ""
              for (var i = 0; i < json.length; i++) {
                var dept = json[i];
                html += "<tr>\n" +
                        "        <td>"+dept.deptno+"</td>\n" +
                        "        <td>"+dept.dname+"</td>\n" +
                        "        <td>"+dept.loc+"</td>\n" +
                        " </tr>"
              }
              document.getElementById("deptbody").innerHTML = html
            }else {
              alert(this.status)
            }
          }
        }
        xhr.open("GET","/ajax_dept/ajaxdept",true)
        xhr.send()
      }
    }
  </script>
  <input type="button" value="显示部门列表" id="btn">
  <table width="50%" border="1px">
    <tr>
      <th>部门编号</th>
      <th>部门名称</th>
      <th>部门位置</th>
    </tr>
    <tbody id="deptbody">
    <!--到时候输出的是以下形式-->
      <!--<tr>
        <td>10</td>
        <td>销售部</td>
        <td>上海</td>
      </tr>
      <tr>
        <td>20</td>
        <td>研发部</td>
        <td>广州</td>
      </tr>-->
    </tbody>
  </table>
  </body>
</html>

后端代码

@WebServlet("/ajaxdept")
public class AjaxDeptServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        StringBuffer json = new StringBuffer();
        String jsonstr = "";
        try {
            conn = DButil.getConnection();
            String sql = "select * from t_dept;";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            json.append("[");
            while (rs.next()){
                json.append("{\"deptno\":" + rs.getInt("deptno") + ",");
                json.append("\"dname\":\"" + rs.getString("dname") + "\",");
                json.append("\"loc\":\"" + rs.getString("loc") + "\"},");
            }
            jsonstr = json.substring(0, json.length() - 1) + "]";
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DButil.close(conn,ps,rs);
        }
        out.print(jsonstr);
    }
}

请添加图片描述

将java对象转换成json格式的字符串

我们发现在后端的json字符串拼接实在是太痛苦了,因为json只能使用双引号“”,而双引号在字符串里需要进行转义,所以拼接字符串的代码看起来就很另类
可以使用阿里巴巴的fastjson组件,它可以将java对象转换成json格式的字符串

对案例进行最终改造

1.把阿里巴巴的fastjson组件导进去
2.创建一个Dept部门类,对外提供set/get方法访问。
3.创建一个List集合存储Dept类
4.把查询到的部门数据存储到java类里面,添加到List集合里

public class Dept {
    private Integer deptno;
    private String dname;
    private String loc;

    public Dept() {
    }

    public Integer getDeptno() {
        return this.deptno;
    }

    public void setDeptno(Integer deptno) {
        this.deptno = deptno;
    }

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public String getLoc() {
        return loc;
    }

    public void setLoc(String loc) {
        this.loc = loc;
    }
}

@WebServlet("/ajaxdept")
public class AjaxDeptServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        //StringBuffer json = new StringBuffer();
        String jsonstr = "";
        try {
            conn = DButil.getConnection();
            String sql = "select * from t_dept;";
            ps = conn.prepareStatement(sql);
            rs = ps.executeQuery();
            List<Dept> deptList = new ArrayList<>();
            /*json.append("[");*/
            while (rs.next()){
                /*json.append("{\"deptno\":" + rs.getInt("deptno") + ",");
                json.append("\"dname\":\"" + rs.getString("dname") + "\",");
                json.append("\"loc\":\"" + rs.getString("loc") + "\"},");*/
                Dept dept = new Dept();
                dept.setDeptno(rs.getInt("deptno"));
                dept.setDname(rs.getString("dname"));
                dept.setLoc(rs.getString("loc"));
                deptList.add(dept);
            }
            jsonstr = JSON.toJSONString(deptList);//把Java对象转换成JSON对象
            //jsonstr = json.substring(0, json.length() - 1) + "]";
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            DButil.close(conn,ps,rs);
        }
        out.print(jsonstr);
    }
}

html页面不用修改
请添加图片描述

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

AJAX JSON的数据传输 的相关文章

随机推荐

  • 判断一个字符是否是十六进制

    判断一个字符是否是十六进制 十六进制 hexadecimal 是计算机中数据的一种表示方法 意思是逢十六进一 十六进制数以16为基数 采用的数码是0 1 2 3 4 5 6 7 8 9 A B C D E F 其中A F分别表示十进制数字1
  • JAVA中的异常处理

    一 什么是异常 异常是指在程序执行过程中出现的错误或异常情况 它可能是由于错误的输入 无效的操作 资源不可用等原因引起的 当程序遇到异常时 它会中断当前的执行路径 并转到能够处理该异常的代码块 在 Java 中 异常是以对象的形式表示的 它
  • PID串行多闭环控制与并行多闭环控制的优缺点分析和应用比较

    导言 在自动控制领域 PID控制器是一种经典的控制策略 被广泛应用于各种工业和非工业过程 随着控制系统的复杂性增加 PID串行多闭环控制和PID并行多闭环控制成为解决复杂控制问题的重要方法 本文将从优点和缺点的角度对这两种控制策略进行对比
  • Android基础之Fragment

    目录 前言 一 Fragment简介 二 Fragment的基础使用 1 创建Fragment 2 在Activity中加入Fragment 1 在Activity的layout xml布局文件中静态添加 2 在Activity的 java
  • 数学建模--粒子群算法(PSO)的Python实现

    目录 1 开篇提示 2 算法流程简介 3 算法核心代码 4 算法效果展示 1 开篇提示 开篇提示 这篇文章是一篇学习文章 思路和参考来自 https blog csdn net weixin 42051846 article details
  • 宝峰对讲机16频率表_宝峰888S对讲机的16个信道频率是多少?

    1 宝峰888S对讲机 16个工作频率范围为 400 470MHZ 16个信道 频率范围内 任意频道任意频率 内 2 一般对讲机没容有固定频点 出厂都是空频机器 每个信道的频率都可以写成机器频率范围内的任意频点也可以空白什么都不写 3 根据
  • 矩阵求逆四种方法

    注 用A B表示某矩阵 E表示单位矩阵 用A 表示A逆 用 A 表示A的行列式 A E 表示拼接矩阵 一 公式法 先求A行列式结果 再求A伴随矩阵 最后再求A逆矩阵 A 0 则 A A A 注 图片中detA就是 A 二 初等变换法 A E
  • 【沧海拾昧】Proteus8仿真stm32:ADC转换程序

    C0102 沧海茫茫千钟粟 且拾吾昧一微尘 沧海拾昧集 CuPhoenix 阅前敬告 沧海拾昧集仅做个人学习笔记之用 所述内容不专业不严谨不成体系 如有问题必是本集记录有谬 切勿深究 目录 一 原理图绘制 二 多位七段数码管 三 ADC引脚
  • 一维动态规划总结

    题目列表 给一个N 输入 求某种情况的最大值或者最小值情况 279 Perfect Squares 思路 最差情况下 总体是定义一个dp N 1 或者初始化前面dp 0 或者dp 1 279 Perfect Squares 解析 Given
  • sql:command not found

    写一个脚本zl sh 用来删除数据库mydatabase中某个表mytable的某行数据 bin bash HOSTNAME 127 0 0 1 PORT 2918 USERNAME root PASSWORD root TABLENAME
  • 使用mockjs创建假数据

    npm install mockjs 创建mock文件夹 在mock文件夹下创建1 js 1 js import Mock from mockjs 引入mockjs export default Mock mock postdata1 po
  • 剑网三服务器缺少必要启动文件,win7系统玩剑网三游戏经常掉线的解决方法

    很多小伙伴都遇到过win7系统玩剑网三游戏经常掉线的困惑吧 一些朋友看过网上零散的win7系统玩剑网三游戏经常掉线的处理方法 并没有完完全全明白win7系统玩剑网三游戏经常掉线是如何解决的 今天小编准备了简单的解决办法 只需要按照1 掉线基
  • 循环神经网络RNN以及几种经典模型

    RNN简介 现实世界中 很多元素都是相互连接的 比如室外的温度是随着气候的变化而周期性的变化的 我们的语言也需要通过上下文的关系来确认所表达的含义 但是机器要做到这一步就相当得难了 因此 就有了现在的循环神经网络 他的本质是 拥有记忆的能力
  • el-menu-item内容过多,不能滚动

    问题描述 这里放了六张图片 只能看到最下面的部分 上面的部分被挤出了屏幕外面 这里的弹出框是element ui组件自动生成的 即这个div 我此时有关这部分的代码如下 解决思路 一开始是想抓住这个生成的div 修改这个div的样式试图让它
  • python 2.x安装

    1 查看当前python版本 python version 2 安装最新2 x版本 brew install python 2 安装完成后 注意一下提示 pip and setuptools have been installed To u
  • 阻碍区块链应用落地的五大难题和解决方案

    2018年初区块链掀起了一阵新热潮 多家互联网公司纷纷宣布推出区块链项目 新兴的区块链项目方和媒体百家争鸣 一时之间区块链行业风光无限 区块链概念的火爆 使得越来越多的人开始学习它 理解它 甚至 拥抱 它 只是沉浸在 狂欢 里的众人怎么也没
  • show,attend and tell(image caption论文复现总结)

    论文中的核心思想 GitHub上的Image Caption项目https github com sgrvinod a PyTorch Tutorial to Image Captioning 研究的问题 Image Caption 为图片
  • _I,_O,_IO,条件编译#ifndf _HEAD_H中的下划线_是什么,有什么用

    1 其实质是一个宏名 由此我们可以防止发生重复定义或声明 2 编程风格 使标识符含义更清晰易懂 假设你的头文件名为head h 根据习惯 我们声明一个宏HEAD H 对应这个头文件 在头文件中开始的地方和结尾的地方加上 对HEAD H的声明
  • CentOS8更换阿里云yum源

    以下是使用阿里云的CentOS 8镜像源配置文件作为示例 备份原有的yum源文件 以便需要时恢复 sudo mv etc yum repos d CentOS tmp 下载并安装阿里云的CentOS 8源配置文件 sudo curl o e
  • AJAX JSON的数据传输

    文章目录 AJAX的JSON引入 javascriptJSON对象创建和访问 javascript怎么创建JSON对象 javascript访问JSON javascript字符串转换成JSON对象 对案例进行改造 使用json传输 将ja