当前位置: 首页 > news >正文

Web基础06-AJAX,Axios,JSON数据

目录

一、AJAX

1.概述

2.主要作用

3.快速入门

4.AJAX的优缺点

(1)优点

(2)缺点

5.同源策略

二、Axios

1.概述

2.快速入门

3.请求方式别名

三、JSON

1.概述

2.主要作用

3.基础语法

4.JSON数据转换

(1)JSON字符串转为JS对象

(2)JS对象转为JSON字符串

(3)JSON字符串转为Java对象

(4)Java对象转为JSON字符串

四、使用Axios+Json简化以前代码


一、AJAX

1.概述

AJAX(Asynchronous JavaScript And XML):异步的 JavaScript 和 XML

2.主要作用

  • 与服务器进行数据交换:通过AJAX可以给服务器发送请求,并获取服务器响应的数据

  • 异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索、用 户名是否可用校验,等等...

不需要用JSP了~

同步与异步

最直接的

  • 同步,在没有收到/得到结果之前不能干任何事

  • 异步,在没有收到/得到结果之前还能干其他事

3.快速入门

  • 编写AjaxServlet并使用response输出字符串

  • 创建 XMLHttpRequest 对象:用于和服务器交换数据

servlet

@WebServlet("/ajaxServlet")
public class AjaxServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//response.getWriter().write("hello ajax");}
​@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Tryrun 1</title>
</head>
<body>
<div id="view"><p>点击下面的按钮,将 Ajax 请求回来的数据更新在该文本内</p>
</div>
<button type="button" id="btn">发起 Ajax 请求</button>
​
<script>document.getElementById("btn").onclick = ajaxRequest;
​function ajaxRequest () {var xhr = new XMLHttpRequest();//true是否为异步,false为同步xhr.open("GET", "http://localhost:8080/practice02_war/ajaxServlet", true);xhr.send();
​xhr.onreadystatechange = function(){if (xhr.readyState === 4 && xhr.status === 200) {document.getElementById("view").innerHTML = xhr.responseText;}}}
</script>
</body>

之后启动服务器,html直接使用idea快速打开即可

4.AJAX的优缺点

(1)优点
  • 最大的优点是页面无刷新更新,用户的体验非常好;

  • 使用异步方式与服务器通信,具有更迅速的响应能力;

  • 可以将一些服务器工作转移到客户端,利用客户端资源来处理,减轻服务器和带宽的压力,节约空间和带宽租用成本;

  • 技术标准化,并被浏览器广泛支持,不需要下载插件或者小程序;

  • Ajax 可使因特网应用程序更小、更快、更友好。

(2)缺点
  • Ajax 不支持浏览器 back 返回按钮;

  • 有安全问题,Ajax 暴露了与服务器交互的细节;

  • 对搜索引擎不友好;

  • 破坏了程序的异常机制;

  • 不容易调试。

5.同源策略

同源策略是一种安全协议,是客户端脚本(尤其是 JavaScript)中重要的安全度量标准,指一段脚本只能读取同一来源的窗口和文档的属性。

URL 地址中的 协议域名端口 三者 相同。

url组成:scheme: //host:post/path?query#fragment

  • scheme:通信协议,一般为 http 、https;

  • host:域名;

  • post:端口号,此项为可选项,http 协议默认的端口号为 80,https 协议默认的端口号为 443;

  • path:路径,由 "/ "隔开的字符串;

  • query:查询参数,此项为可选项;

  • fragment:信息片段,用于指定网络资源中的某片断,此项为可选项;

使用 Ajax 请求后端数据时,只能跟同源的后端接口进行数据交互,即:后端接口的 URL 与发起 Ajax 请求的页面 URL 之间,需要满足同源策略。

不满足 "同源策略" 的请求浏览器通常都会报错

使用同源策略的目的:

  • 为了数据的安全性。若没有同源策略的限制,那么黑客就可以在他的页面上任意请求你的后端数据,造成数据库内容被盗取、隐私数据泄漏。

实现跨域请求的方式:

虽然 Ajax 请求需要满足同源策略,然而在一些场景中,你真的需要 Ajax 访问其它 "源" 的数据(称为跨域访问),这时需要后端服务器进行相应的设置。

如果服务器端支持 CORS,可以通过设置Access-Control-Allow-Origin来实现跨域。如果浏览器检测到相应的设置,就会允许 Ajax 进行跨域访问。

Java中实现跨域的五种方式_java跨域-CSDN博客

二、Axios

1.概述

Axios 对原生的AJAX进行封装,简化书写

Axios中文文档 | Axios中文网 (axios-http.cn)

2.快速入门

  • 引入axios

  • 使用axios发送请求,并获取响应

<script src="axios.min.js"></script>
<script>axios({method:"get",url:"http://localhost:8080/practice02_war/axiosServlet?username=zhangsan"}).then(function (response) {alert(response.data)})
​axios({method: "post",url:"http://localhost:8080/practice02_war/axiosServlet",data:"username=zhangsan"}).then(function (response) {console.log(response.data)})
</script>

servlet

@WebServlet("/axiosServlet")
public class AxiosServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {final String username = request.getParameter("username");response.getWriter().write("username:"+username);
​}
​@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {System.out.println("post");this.doGet(request, response);}
}

3.请求方式别名

为了方便起见,已经为所有支持的请求方法提供了别名。

Axios API | Axios中文文档 | Axios中文网 (axios-http.cn)

axios.get("http://localhost:8080/practice02_war/axiosServlet?username=zhangsan").then(function (response) {alert(response.data)
})
axios.post("http://localhost:8080/practice02_war/axiosServlet","username=zhangsan").then(function (response) {console.log(response.data)
})

三、JSON

1.概述

JavaScript Object Notation。JavaScript 对象表示法

2.主要作用

由于其语法简单,层次结构鲜明,现多用于作为数据载体,在网络中进行数据传输

3.基础语法

定义:多个属性值用,隔开

var 变量名 = {"键名":值,"key":value}

value值类型可为:

  • 数字

  • 字符串

  • 逻辑值

  • 数组

  • 对象

  • null(几乎不用)

直接输出就是JSON字符串

4.JSON数据转换

(1)JSON字符串转为JS对象
var jsObject=JsoN.parse(jsonstr);
(2)JS对象转为JSON字符串
var jsonStr = JSON.stringify(jsObject)
(3)JSON字符串转为Java对象

使用一个api

fastjson

是阿里巴巴提供的一个Java语言编写的高性能功能完善的JSON库,是目前Java语言中最快的JSON库,可以实现Java对象和JSON字符串的相互转换。

  • 导入坐标

<!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.47</version></dependency>

转换:

User user = JSON.parseObject("json字符串", User.class);
(4)Java对象转为JSON字符串
String jsonStr = JSON.toJSONString(new User());

注意:

在Axios中(1)和(2)的转换会自动完成,不需要手写~

四、使用Axios+Json简化以前代码

这里以展示所有商品为例

这里只要能获取到数据即可,页面展示就先不写了

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><button id="selectAll" >点我查看所有商品</button><hr><table id="table" border="1px solid black">
​</table>
</body>
<script src="js/jquery-3.7.1.min.js"></script>
<script src="js/axios.min.js"></script>
​
<script>$("#selectAll").click(function () {console.log("点击触发了")axios({method:"get",url:"http://localhost:8080/practice02_war/selectAll"}).then(function (response) {let products = response.data;for (let i = 0; i < products.length; i++) {let product = products[i];console.log(product)}})})
</script>
</html>

selectAll

@WebServlet("/selectAll")
public class SelectAll extends HttpServlet {private final ProductService productService = new ProductService();@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {final List<Product> products = productService.selectAll();//将集合转为JSON数据(序列化)final String s = JSON.toJSONString(products);response.setContentType("text/json;charset=utf-8");//跨域response.addHeader("Access-Allow-Control-Origin","*");response.getWriter().write(s);}
​@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doGet(request, response);}
}

预览:

关于页面展示可以自己写,但没必要,后面有更好的方式展示数据

http://www.lryc.cn/news/320679.html

相关文章:

  • Java 文件序列化和反序列化
  • NETLINK_ROUTE 与 NETLINK_SOCK_DIAG 的区别与用法
  • docker yocto vscode
  • 使用ansible剧本进行lvm分盘
  • 【排序】快速排序
  • Python大数据实践:selenium爬取京东评论数据
  • 信息系统项目管理师019:存储和数据库(2信息技术发展—2.1信息技术及其发展—2.1.3存储和数据库)
  • Python基础(六)之数值类型元组
  • Chrome历史版本下载地址:Google Chrome Older Versions Download (Windows, Linux Mac)
  • ROS2纯跟踪实现(C++)
  • uniapp微信小程序随机生成canvas-id报错?
  • 爬虫 Day2
  • 达梦数据库SQL
  • python教程——把视频转成gif
  • 深入浅出Go的`encoding/xml`库:实战开发指南
  • 深度学习之扩散模型(Diffusion model)
  • Tomcat Session ID---会话保持
  • Session会话绑定
  • win7、win10、win11 系统能安装的.net framework 版本以
  • RediSearch比Es搜索还快的搜索引擎
  • mybatis-plus 的saveBatch性能分析
  • python异常:pythonIOError异常python打开文件异常
  • 电话机器人语音识别用哪家更好精准度更高。
  • 【Unity动画】Unity如何导入序列帧动画(GIF)
  • uniapp APP 上传文件
  • arcgis数据导出到excel
  • 吴恩达深度学习环境本地化构建wsl+docker+tensorflow+cuda
  • R语言:microeco:一个用于微生物群落生态学数据挖掘的R包:第七:trans_network class
  • ubuntu下在vscode中配置matplotlibcpp
  • Vue面试题,背就完事了