AJAX实现JSON与XML数据交换方法详解 - 网站

AJAX实现JSON与XML数据交换方法详解

分类:js_jQuery答疑 - 常见问题 · 发布时间:2023-02-25 03:54 · 阅读:5800

这篇文章主要介绍了AJAX实现JSON与XML数据交换方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

1、JS中如何创建和访问JSON对象

(1)在javascript语言中怎么创建一个json对象,语法是什么?

"属性名" : 属性值,"属性名" : 属性值.........的格式!

注意:属性值的数据类型随意;可能是数字,可能是布尔类型,可能是字符串,可能是数组,也可能是一个json对象.....

  Title 

(2)如何去访问json对象?主要有两种方式:

第一种方式:使用 .属性名 的方式

第二种方式:使用 ["属性名"] 的方式

   // 第一种方式 console.log(address.city); console.log(user.addr.street); for (var i = 0;i

2、基于JSON的数据交换

(1)将JSON格式字符串转换为JSON对象

我们知道从后端java程序中响应回来的是字符串(json格式的字符串),那么你怎么把json格式的字符串转换成json对象呢?主要有两种方式:

JSON格式的字符串

var fromJavaServerJsonStr = "{"usercode" : 111, "age" : 20}"; // \是转义字符的作用,防止与外面的双引号冲突 var fromJavaServerJsonStr = "{\"usercode\" : 111, \"age\" : 20}";

第一种方式:使用eval函数

window.eval("var jsonobj1 = " + fromJavaServerJsonStr); // 进行访问 alert(jsonobj1.usercode); // 111

第二种方式:调用javascript语言中的内置对象JSON的一个方法parse。

var jsonobj2 = JSON.parse(fromJavaServerJsonStr); alert(jsonobj2.age); // 20

(2)基于JSON的数据交换

①对于后端,不在写html的代码,只负责把数据以JSON格式的字符串返回;后端变轻松了。

②对于前端,负责把接收到的JSON格式的字符串转换成JSON对象,并完成拼串的操作;前端变复杂了。

③整体上,后端只会出现后端的代码,前端只会出现前端的代码,便于维护!

第一种方式:对于静态的字符串

后端得到静态的数据,不在拼接HTML程序(写前端代码),只负责把数据响应回去,拼接成JSON格式的字符串

StringBuilder html = new StringBuilder(); html.append(""); html.append("1"); html.append("王五"); html.append("20"); html.append("北京大兴区"); html.append(""); html.append(""); html.append("2"); html.append("李四"); html.append("22"); html.append("北京海淀区"); html.append(""); // --------------------------------------------修改为 // 将以上程序拼接HTML,换成拼接JSON格式的字符串。 String jsonStr = "[{\"name\":\"王五\",\"age\":20,\"addr\":\"北京大兴区\"}, {\"name\":\"李四\",\"age\":22,\"addr\":\"北京海淀区\"}]"; // 响应JSON格式的字符串给前端。 out.print(jsonStr);

前端不在直接拿后端拼好的字符串格式,而是拿到JSON格式的字符串进行处理,在前端进行拼串

document.getElementById("stutbody").innerHTML = this.responseText // -----------------------------------修改为 // 将json格式的字符串转换成json对象 var stuList = JSON.parse(this.responseText); // 是一个数组,并且数组中有多个学生数据 var html = "" for (var i = 0; i " html += ""+stu.name+"" html += ""+stu.age+"" html += ""+stu.addr+"" html += "" } document.getElementById("stutbody").innerHTML = html

第二种方式:连接数据库动态拼接JSON字符串

①创建数据库表

②后端连接数据库,拼接成JSON格式的字符串

package com.bjpowernode.javaweb.ajax; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; /** * @Author:朗朗乾坤 * @Package:com.bjpowernode.javaweb.ajax * @Project:ajax * @name:AjaxRequest5Servlet * @Date:2022/12/6 17:13 */ @WebServlet("/ajaxrequest5") public class AjaxRequest5Servlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 响应到浏览器 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); // 用于拼接成JSON的字符串 StringBuffer json = new StringBuffer(); String jsonobj = ""; // 连接数据库 Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try { // 注册驱动 Class.forName("com.mysql.jdbc.Driver"); // 获取连接 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bjpowernode?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC", "root", "123"); // 获取预编译的数据库操作对象 String sql = "select name,age,addr from t_student "; ps = conn.prepareStatement(sql); // 执行sql rs = ps.executeQuery(); // 处理查询结果集 json.append("["); while (rs.next()) { // 每循环一次,就拼接一次 String name = rs.getString("name"); String age = rs.getString("age"); String addr = rs.getString("addr"); // 拼成JSON格式的字符串对象,每次循环拼接的格式如下 // {"name":" 王五 ","age": 20 ,"addr":" 北京大兴区 "}, json.append(" {\"name\":\""); json.append(name); json.append("\",\"age\":"); json.append(age); json.append(",\"addr\":\""); json.append(addr); json.append("\"},"); } // 上面这样拼接,最后一个JSON格式的对象会多一个逗号,所以进行截串 jsonobj = json.substring(0,json.length()-1) + "]"; } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally { // 释放资源 if (rs != null) { try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } // 响应JSON格式的字符串给前端 out.print(jsonobj); } }

③前端对JSON格式的字符串进行处理,然后拼串

  发送AJAX请求,显示学生列表 
序号姓名年龄住址

④效果展示,点击按钮

(3)fastjson组件优化代码

从上面代码来看,拼接JSON格式的字符串太痛苦,可以使用阿里巴巴的fastjson组件,它可以将java对象转换成json格式的字符串

相关文章

AJAX乱码与异步同步以及封装jQuery库实现步骤详解

这篇文章主要介绍了异步通信技术AJAX乱码问题、异步与同步、手动封装一个jQuery库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

AJAX的跨域问题解决方案

跨域简单的说,就是从一个域名的网页去访问另一个域名网页的资源,下面这篇文章主要给大家介绍了关于AJAX的跨域问题解决的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

利用Ajax实现智能回答的机器人示例代码

这篇文章主要介绍了利用Ajax实现智能回答的机器人,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

ajax、axios和fetch之间优缺点重点对比总结

今天被问到用没用过ajax axios,我回答经常用axios,但ajax用的比较少,下面这篇文章主要给大家介绍了关于ajax、axios和fetch之间优缺点重点对比总结的相关资料,需要的朋友可以参考下

如何通过axios发起Ajax请求(最新推荐)

Axios是专注于网络数据请求的库,相比于原生的XMLHttpRequest对象,axios简单易用。相比于Jquery,axios更加轻量化,只专注于网络数据请求,这篇文章主要介绍了如何通过axios发起Ajax请求,需要的朋友可以参考下

返回分类 返回首页