【Java】数据交换 Json 和 异步请求 Ajax

 🎄欢迎来到@边境矢梦°的csdn博文,本文主要讲解Java 中 数据交换和异步请求 Json&Ajax 的相关知识🎄


🌈我是边境矢梦°,一个正在为秋招和算法竞赛做准备的学生🌈
🎆喜欢的朋友可以关注一下🫰🫰🫰,下次更新不迷路🎆

Ps: 月亮越亮说明知识点越重要 (重要性或者难度越大)🌑🌒🌓🌔🌕  

在这里插入图片描述

目录

一. JSON

🌓1. JSON介绍

🌓2. JSON 的定义格式

🌕3. JSON 规则

🌔4. JSON 对象和字符串对象转换(javaScript)

🌓5. JSON 在 java 中使用

二. ajax

🌓1. Ajax基本介绍 

🌓2. Ajax特点

🌓3. Ajax 经典应用场景

🌕4. Ajax基本原理

🌓5. 原生Ajax

🌓6. JQuery 的 Ajax 请求


 jQuery 参考手册 - Ajax (w3school.com.cn)

一. JSON

JSON 具有自我描述性,更易理解 , 一句话,非常的好用

1. JSON介绍

🌸JSON: JavaScript Object Notation(JavaScript 对象标记法)。

📌JSON 是一种存储和交换数据的语法。

🎈JSON 是通过 JavaScript 对象标记法书写的文本。

🌸JSON(JavaScript Object Notation)是一种轻量级的数据交换格式 (String)

📌JSON易于阅读和编写的文本形式表示数据

🎈JSON数据使用键值对的方式进行组织,并且可以包含数组、对象和简单的数据类型(例如字符串、数字、布尔值和null)

JSON的语法规则相对简单,它由以下几个基本结构组成:

  • 对象(Object):使用花括号{}表示,对象是由键值对组成的无序集合,每个键值对之间使用逗号分隔。
  • 数组(Array):使用方括号[]表示,数组是由值组成的有序集合,每个值之间使用逗号分隔。
  • 值(Value):表达数据的不同类型,可以是字符串、数字、布尔值、对象、数组或null。
  • 键值对(Key-Value):表示对象中的属性和对应的值,键和值之间用冒号:分隔。
  • 字符串(String):由双引号""或单引号’'括起来的Unicode字符序列。

2. JSON 的定义格式

var 变量名 = {
        "k1" : value, // Number 类型
        "k2" : "value", // 字符串类
        "k3" : [],// 数组类型
        "k4" : {}, // json 对象类型
        "k5" : [{},{}] // json 数组
};

以下是一个简单的JSON对象的例子: 

{
  "name": "John",
  "age": 30,
  "isStudent": true,
  "hobbies": ["reading", "music", "sports"],
  "address": {
    "street": "123 Main St",
    "city": "New York"
  }
}

3. JSON 规则

1) 映射(元素/属性)用冒号 : 表示, " 名称 ": , 注意名称是字符串,因此要用双引号引起
2) 并列的数据之间用逗号 , 分隔。 " 名称 1": ," 名称 2":
3) 映射的集合(对象)用大括号 {} 表示 {" 名称 1": ," 名称 2": }
4) 并列数据的集合(数组)用方括号 [] 表示 [{" 名称 1": ," 名称 2": }, {" 名称 1": ," 名称 2": }]
5) 元素值类型: string, number, object, array, true, false, null
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>json 快速入门案例</title>
    <script type="text/javascript">
        var myJson = {
            "key1": "快速入门案例", // 字符串
            "key2": 123, // Number
            "key3": [1, "hello", 2.3], // 数组
            "key4": {"age": 12, "name": "jack"}, //json 对象
            "key5": [ //json 数组
                {"k1": 10, "k2": "milan"}, {"k3": 30, "k4": "smith"}
            ]
        };
        //访问 json 的属性
        console.log("key1= " + myJson.key1);
        // 访问 json 的数组属性
        console.log("key3[1]= " + myJson.key3[1]); // hello
        // 访问 key4 的 name 属性
        console.log("name= " + myJson.key4.name); // jack
        // 访问 key5 json 数组的第一个元素
        console.log("myJson.key5[0]= " + myJson.key5[0]); //[object, object]
        console.log("myJson.key5[0].k2= " + myJson.key5[0].k2)// milan
    </script>
</head>
<body>
<h1>json 快速入门案例</h1>
</body>
</html>

4. JSON 对象和字符串对象转换(javaScript)

1. JSON.stringify(json) 功能 : 将一个 json 对象转换成为 json 字符串 [ 简单说名字来源 .] Serialize
2. JSON.parse( jsonString ) 功能 : 将一个 json 字符串转换成为 json 对象  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>JSON 对象和字符串对象转换</title>
    <script type="text/javascript">
        // 一个 json 对象
        var jsonObj = {"name": "对象和字符串对象转换", age: 10};
        //JSON 是一个 build-in 对象,内建对象,有方法可以使用
        console.log(JSON)
        // 把 json 对象转换成为字符串对象
        var jsonStr = JSON.stringify(jsonObj);
        console.log(jsonStr);
        // 把 json 对象的字符串,转换成为 json 对象
        var jsonObj2 = JSON.parse(jsonStr);
        console.log(jsonObj2);
    </script>
</head>
<body>
<h1>JSON 对象和字符串对象转换</h1>
</body>
</html>

注意事项和细节
1 JSON.springify(json 对 象 ) 会 返 回对 应 string, 并 不 会影 响 原 来 json 对 象 ,
2 JSON.parse(string) 函数会返回对应的 json 对象 , 并不会影响原来 string
3 、在定义 Json 对象时 , 可以使用 ' ' 表示字符串 , 比如 var json_person = { "name" : "jack" , "age" : 100 }; 也可以写成 var json_person = { 'name' : 'jack' , 'age' : 100 };
4 、但是在把原生字符串转成 json 对象时 , 必须使用 "", 否则会报错 比如: var str_dog = "{'name':' 小黄狗 ', 'age': 4}" ; json 就会报错  
5 JSON.springify(json 对象 ) 返回的字符串 , 都是 "" 表示的字符串 , 所以在语法格式正确 的情况下 , 是可以重新转成 json 对象的  

5. JSON java 中使用

说明
        1. java 中使用 json ,需要引入到第 3 方的包 gson.jar
        2. Gson 是 Google 提供的用来在 Java 对象 JSON 数据 之间进行映射的 Java 类库。

        3. 可以对 JSON 字符串 和 Java 对象相互转换
JSON Java 中应用场景
        1. Javabean 对象和 json 字符串 的转换
        2. List 对象和 json 字符串 的转换
        3. map 对象和 json 字符串 的转换

 

应用场景示意图
    public static void main(String[] args) {
        // new 一个 gson 对象。引入 gson 包
        Gson gson = new Gson();
        //1. java 对象和 json 的转换
        System.out.println("\n=== 1. java 对象和 json 的转换 ====");
        Book book = new Book(100, "韩顺平零基础学 Java");
        // 把对象转成为 json 字符串
        String bookStr = gson.toJson(book);
        System.out.println(bookStr);
        // 把 json 字符串转换成为 java 对象
        Book book2 = gson.fromJson(bookStr, Book.class);
        System.out.println(book2);
        
        //2 List 集合和 json 的转换
        System.out.println("\n======2 List 集合和 json 的转换======");
        ArrayList<Book> bookList = new ArrayList<>();
        bookList.add(new Book(200, "天龙八部"));
        bookList.add(new Book(300, "神雕侠侣"));
        //将 list 转成 json 字符串
        String bookListStr = gson.toJson(bookList);
        System.out.println("bookListStr=" + bookListStr);
        //将 json 字符串转成 List 集合方式 1
        List<Book> bookList2 = gson.fromJson(bookListStr, 
                new BookType().getType());
        System.out.println("bookList2=" + bookList2);
        //将 json 字符串转成 List 集合方式 2- 使用 匿名内部类
        List<Book> bookList3 = gson.fromJson(bookListStr, 
                new TypeToken<List<Book>>() {}.getType());
        System.out.println("bookList3=" + bookList3);
        
        //3. map 集合和 json 的转换
        System.out.println("\n====3. map 集合和 json 的转换=====");
        Map<String, Book> bookMap = new HashMap<>();
        bookMap.put("sn1", new Book(10, "射雕英雄传"));
        bookMap.put("sn2", new Book(20, "碧血剑"));
        // 把 map 转换成为 json
        String bookMapStr = gson.toJson(bookMap);
        System.out.println("bookMapStr=" + bookMapStr + " 类 型 =" +
                bookMapStr.getClass());
        // 把 json 转成 map
        Map<String, Book> bookMap2 = gson.fromJson(bookMapStr, 
                new TypeToken<HashMap<String, Book>>() {}.getType());
        System.out.println("bookMap2=" + bookMap2 + " 类型=" + bookMap2.getClass());
    }

 JSON具有良好的可读性和可扩展性,广泛应用于Web应用程序间的数据交换、配置文件的存储和API的传输。在许多编程语言中,都提供了JSON的解析和生成库,以方便对JSON数据进行操作和处理。


二. ajax

1. Ajax基本介绍 

1. AJAX "Asynchronous Javascript And XML"(异步 JavaScript XML)

2. Ajax 是一种浏览器 异步发起请求 ( 指定发哪些数据 ) 局部更新页面 的技术
3. 传统的方式只能刷新整个页面

AJAX 是开发者的梦想,因为您能够:

  • 不刷新页面更新网页
  • 在页面加载后从服务器请求数据
  • 在页面加载后从服务器接收数据
  • 在后台向服务器发送数据

 Ajax(Asynchronous JavaScript and XML)是一种用于创建快速、动态网页的技术。它通过在后台与服务器进行数据交换,使网页能够在无需重新加载整个页面的情况下更新部分内容。

🎈传统的网页交互方式是用户与服务器进行完整的页面请求和响应,即用户执行某个操作,服务器接收请求并返回完整的新页面。这种方式存在效率低下和用户体验差的问题。

📌而Ajax通过在后台使用JavaScript和XML或其他数据格式, 使网页能够

        🌸在不刷新整个页面的情况下与服务器进行数据交互和部分内容更新🌸。

        通过异步通信,Ajax 可以在用户完成某个操作之后,将用户请求发送到服务器,并在接收到服务器的响应后,动态地更新页面的相应部分,而不需要重新加载整个页面。

2. Ajax特点

Ajax技术的特点包括:

  • 异步通信:通过使用异步通信,用户可以继续与页面交互,而无需等待服务器响应。
  • 数据交换:Ajax可以与服务器进行数据交换,可以在不刷新整个页面的情况下更新页面的局部内容。
  • DOM操作:Ajax可以使用JavaScript操作DOM,实现动态页面的创建和更新。
  • 增强用户体验:由于Ajax可以快速地更新页面的一部分,因此可以提供更快速、更流畅的用户体验。

尽管Ajax中的“X”代表XML,但实际上,现代的Ajax应用程序通常使用JSON、HTML或纯文本格式来传输数据,而不是XML。

Ajax已经成为现代Web应用程序开发的重要技术之一,被广泛应用于各种Web应用,包括社交媒体、在线购物以及各种在线工具和应用程序。

3. Ajax 经典应用场景

1. 搜索引擎根据用户输入关键字,自动提示检索关键字
2. 动态加载数据,按需取得数据【树形菜单、联动菜单 ...
3. 改善用户体验。【输入内容前提示、带进度条文件上传 ...
4. 电子商务应用。 【购物车、邮件订阅 ...
5. 访问第三方服务。【访问搜索服务、 rss 阅读器】
6. 页面局部刷新 , https://piaofang.maoyan.com/dashboard

4. Ajax基本原理

 

 5. 原生Ajax

function checkUser() {
            var xhr = new XMLHttpRequest();
            var uname = document.getElementById("uname").value;
            xhr.open("GET", "/ajaxStu/check?username=" + uname, true);

            xhr.onreadystatechange = function () {
                // console.log("xhr = ",  xhr);
                if (xhr.readyState === 4 && xhr.status === 200) {
                    if(xhr.responseText.trim() === "") {
                        document.getElementById("myres").value = "用户名可用";
                    } else {
                        document.getElementById("myres").value = "用户名不可用";
                    }
                }
                document.getElementById("div1").innerText = xhr.responseText;
            }

            xhr.send();
        }

6. JQuery Ajax 请求

 

jQuery(function () {
            $("#check").click(function () {
                window.alert("hello")
                $.ajax({
                    url:"/ajaxStu/check2",
                    type:"POST",
                    data:{
                        username:$("#uname").val(),
                        date:new Date()
                    },
                    success:function (date, status, xhr) {
                        console.log("成功~");
                        console.log(date);
                        console.log(status);
                        console.log(xhr);

                        if("king" === date.username) {
                            $("#myres").val("用户不可用");
                        } else {
                            $("#myres").val("用户可用");
                        }
                        $("#div1").html(JSON.stringify(date));
                    },
                    error:function () {
                        console.log("失败~")
                    },
                    dataType:"json"
                })
                $.get(
                    "/ajaxStu/check2",
                    {
                        username:$("#uname").val(),
                        date:new Date()
                    },
                    function (date, status, xhr) {
                        console.log("get()成功~");
                        console.log(date);
                        console.log(status);
                        console.log(xhr);

                        if("king" === date.username) {
                            $("#myres").val("用户不可用");
                        } else {
                            $("#myres").val("用户可用");
                        }
                        $("#div1").html(JSON.stringify(date));
                    },
                    "json"
                )

                $.post(
                    "/ajaxStu/check2",
                    {
                        username:$("#uname").val(),
                        date:new Date()
                    },
                    function (date, status, xhr) {
                        console.log("post()成功~");
                        console.log(date);
                        console.log(status);
                        console.log(xhr);

                        if("king" === date.username) {
                            $("#myres").val("用户不可用");
                        } else {
                            $("#myres").val("用户可用");
                        }
                        $("#div1").html(JSON.stringify(date));
                    },
                    "json"
                )

                $.getJSON(
                    "/ajaxStu/check2",
                    {
                        username:$("#uname").val(),
                        date:new Date()
                    },
                    function (date, status, xhr) {
                        console.log("getJSON()成功~");
                        console.log(date);
                        console.log(status);
                        console.log(xhr);

                        if("king" === date.username) {
                            $("#myres").val("用户不可用");
                        } else {
                            $("#myres").val("用户可用");
                        }
                        $("#div1").html(JSON.stringify(date));
                    }
                )
            })
        })

 总结

Json(JavaScript Object Notation)是一种轻量级的数据交换格式,采用键值对的形式来表示数据。它广泛应用于Web开发中,特别适合于前后端数据传输和存储。

Ajax(Asynchronous JavaScript and XML)是一种在Web应用中实现异步通信的技术。通过Ajax,前端可以发送异步请求到服务器,获取数据并进行页面更新,而无需刷新整个页面。这项技术使得用户体验更加流畅,同时减轻了服务器的负担。

Json和Ajax经常配合使用。通过Ajax发送请求,服务器可以将数据以Json格式返回给前端,前端再解析Json数据进行页面渲染或其他操作。Json的简洁性和易读性使得数据传输更加高效,而Ajax的异步通信则能提升用户交互体验。

总的来说,Json是一种数据格式,用于表示数据,而Ajax是一种实现异步通信的技术。它们的结合可以帮助开发人员构建高效、流畅的Web应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/69653.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

PCL 计算外接圆的半径

目录 一、算法原理1、计算公式2、主要函数3、源码解析二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,原文链接。爬虫自重。 一、算法原理 1、计算公式

函数的模拟实现

题一&#xff1a; 模拟实现strncpy #include <stdio.h>void my_strncpy(char* arr2, char* arr1, size_t num){int i 0;for (i 0; i < num; i){*(arr2 i) *(arr1 i);}}int main(){char arr1[] "hello liangzai";char arr2[10] { 0 };//strncpy(ar…

【Spring Boot】构建RESTful服务 — 使用Swagger生成Web API文档

使用Swagger生成Web API文档 高质量的API文档在系统开发的过程中非常重要。本节介绍什么是Swagger&#xff0c;如何在Spring Boot项目中集成Swagger构建RESTful API文档&#xff0c;以及为Swagger配置Token等通用参数。 1.什么是Swagger Swagger是一个规范和完整的框架&…

怎么快速搭建BI?奥威BI系统做出了表率

搭建BI系统有两大关键&#xff0c;分别是环境搭建和数仓建设。这两点不管是哪一个都相当地费时费力&#xff0c;那要怎么才能快速搭建BI平台&#xff0c;顺利实现全企业数字化运营决策&#xff1f;奥威BI系统方案&#xff0c;你值得拥有&#xff01; 奥威BI系统方案&#xff0…

12.Eclipse导入Javaweb项目

同事复制一份他的项目给我ekp.rar (懒得从SVN上拉取代码了)放在workspace1目录下 新建一个文件夹 workspace2,Eclipse切换到workspace2工作空间 选择Import导入 选择导入的项目(这里是放到workspace1里面) 拷贝一份到workspace2里面 例子 所有不是在自己电脑上开发的web项目…

haproxy基本编译环境部署

前提&#xff1a;haproxy支持基于lua实现功能扩展&#xff08;需要安装比较新的lua语言&#xff0c;方便进行haproxy编译&#xff09;。 wget http://www.lua.org/ftp/lua-5.3.5.tar.gz lua -v # 检查环境 yum list lua # 查看可以安装环境 同时还需要gcc&#xff0c;gcc-c&…

Transformer(一)简述(注意力机制,NLP,CV通用模型)

目录 1.Encoder 1.1简单理解Attention 1.2.什么是self-attention 1.3.怎么计算self-attention 1.4.multi-headed 1.5.位置信息表达 2.decorder&#xff08;待补充&#xff09; 参考文献 1.Encoder 1.1简单理解Attention 比方说&#xff0c;下图中的热度图中我们希望专注于…

基础篇-环境搭建

JDK安装 https://www.oracle.com/java/technologies/downloads/ 安装完成后&#xff0c;一直点下一步就行 打开控制面板输入cmd运行&#xff0c;控制台输入java -version。如果看到版本号就说明我们安装成功了 JDK的组成 1. JVM JAVA虚拟机&#xff0c;JAVA真正运行的地方 …

喜报!诚恒科技与赛时达科技达成BI金蝶云星空项目合作

随着全球数字化浪潮轰轰烈烈袭来&#xff0c;仅仅凭借手工处理的方式难以在庞大的数据海洋中精准获取信息、把握市场需求、了解目标用户&#xff0c;为企业创新提供强有力的支持。深圳赛时达科技有限公司&#xff08;简称赛时达科技&#xff09;希望通过数字化转型实现从手工处…

虚拟世界探索:科技之下的未来可能性

随着科技的飞速发展&#xff0c;人们对于虚拟世界的憧憬和探索也日益加深。虚拟世界&#xff0c;那是一个超越现实的概念&#xff0c;一个充满想象力和创造力的领域。然而&#xff0c;虚拟世界究竟有可能实现吗&#xff1f;这是一个引人深思的问题。 虚拟世界&#xff0c;首先让…

SQL | 高级数据过滤

5-高级数据过滤 通过组合WHERE子句&#xff0c;建立功能更强的检索语句。 5.1-组合WHERE子句 前面写的都是单一条件下的WHERE子句&#xff0c;SQL语句允许给出多个WHERE子句来组合检索&#xff0c;这些WHERE子句通过AND子句或者OR子句进行连接。 操作符&#xff08;operato…

【数据结构与算法】稀疏数组

文章目录 一&#xff1a;为什么会使用稀疏数组1.1 先看一个实际的需求1.2 基本介绍1.2.1 稀疏数组的处理方法1.2.2 数组的举例说明1.2.3 应用实例1.2.4 整体思路分析二维数组转稀疏数组的思路稀疏数组转原始的二维数组的思路 二&#xff1a;代码实现2.1 创建一个原始的11*11二维…

每天一道leetcode:剑指 Offer 12. 矩阵中的路径(中等DFS深度优先遍历)

今日份题目&#xff1a; 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元…

HCIA---动态路由---RIP协议

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 目录 前言 一.动态路由 二.动态路由协议分类 IGP&#xff1a;内部网关协议 EGP:外部网关协议 三.RIP协议概述 RIP版本分类&#xff1a; RIP三要素&#xff1a; 思维…

全景图!最近20年,自然语言处理领域的发展

夕小瑶科技说 原创 作者 | 小戏、Python 最近这几年&#xff0c;大家一起共同经历了 NLP&#xff08;写一下全称&#xff0c;Natural Language Processing&#xff09; 这一领域井喷式的发展&#xff0c;从 Word2Vec 到大量使用 RNN、LSTM&#xff0c;从 seq2seq 再到 Attenti…

【计算机网络】12、frp 内网穿透

文章目录 一、服务端设置二、客户端设置 frp &#xff1a;A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet。是一个专注于内网穿透的高性能的反向代理应用&#xff0c;支持 TCP、UDP、HTTP、HTTPS 等多种协议&#xff0c;且…

SQL Server Reporting Services 报错:报表服务器无法访问服务帐户的私钥

解决这个问题&#xff0c;有小伙伴提到可以使用命令 exec DeleteEncryptedContent 但这对这边的环境时行不通的&#xff0c;我在【服务账户】的配置和【数据库】的配置中到使用了域账户&#xff0c;试了几次都不行。改成使用内置账户就好了。具体原因还没扒拉&#xff08;欢迎…

4-5-tablewidget

文章目录 添加控件&#xff0c;添加行列数widget.cppwidget.h效果 添加控件&#xff0c;添加行列数 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget) {ui->setupUi(this)…

linux和C++中的 线程同步与线程安全 对比

线程同步与线程安全 线程进程与线程的区别并发和并行的区别linux线程常用接口函数函数定义函数使用 多线程理解 线程同步五个线程同时启动&#xff0c;每一个循环打印3次五个线程&#xff0c;每一个循环1000 结果是<5000代码和测试结果测试结果分析可以用信号量和互斥锁解决…