Ajax 是 “Asynchronous JavaScript and XML”(异步 JavaScript 和 XML)的缩写。它是一种在无需重新加载整个网页的情况下,与服务器交换数据并更新部分网页内容的技术。简单来说,Ajax 可以让网页在不影响用户体验的前提下,实时更新数据。
Ajax 的工作原理如下:
这种方式的优点是,只有需要更新的部分才会发送请求和接收响应,大大减少了数据传输量,提高了应用程序的性能和用户体验。即异步交互。
不过,需要注意的是,虽然 Ajax 的名称中包含 “XML”,但现在的数据格式并不一定是 XML,很多时候我们会使用 JSON 格式,因为 JSON 更易于在 JavaScript 中处理。
如下图所示,当我们再百度搜索java时,下面的联想数据是通过Ajax请求从后台服务器得到的,在整个过程中,我们的Ajax请求不会导致整个百度页面的重新加载,并且只针对搜索栏这局部模块的数据进行了数据的更新,不会对整个页面的其他地方进行数据的更新,这样就大大提升了页面的加载速度,用户体验高。
针对于上述Ajax的局部刷新功能是因为Ajax请求是异步的,与之对应的有同步请求。接下来我们介绍一下异步请求和同步请求的区别。
原生的 AJAX 指的是直接使用 JavaScript 的 XMLHttpRequest 对象来创建和发送 AJAX 请求,而不是使用 jQuery 或其他 JavaScript 库。下面是一个基本的 AJAX 请求的例子,使用原生的 JavaScript 实现:
// 创建一个新的 XMLHttpRequest 对象
var xhr = new XMLHttpRequest();
// 配置请求
xhr.open('GET', 'https://api.example.com/data', true);
// 设置请求完成后的处理函数
xhr.onload = function () {
// 检查 HTTP 响应状态码
if (xhr.status >= 200 && xhr.status < 300) {
// 当请求成功完成时,解析响应数据
var data = JSON.parse(xhr.responseText);
console.log(data);
} else {
// 当请求失败时,打印错误信息
console.log('Error: ' + xhr.status);
}
};
// 设置请求错误时的处理函数
xhr.onerror = function () {
console.log('Request failed');
};
// 发送请求
xhr.send();
Axios 是一个非常流行的 JavaScript 库,主要用于浏览器和 Node.js 中的 HTTP 客户端。Axios 提供了一个简洁且直观的 API,可以用来发送 HTTP 请求。Axios 支持 Promise API,使异步处理变得更加简单,代码也更容易理解。
以下是一个使用 Axios 发送 GET 请求的基本示例:
axios.get('https://api.example.com/data')
.then(function (response) {
// 当请求成功时,处理响应数据
console.log(response.data);
})
.catch(function (error) {
// 当请求失败时,处理错误
console.log(error);
});
Axios的使用比较简单,主要分为2步:
<script src="js/axios-0.18.0.js"></script>
axios({
method:"get",
url:"http://localhost:8080/ajax-demo1/aJAXDemo1?username=zhangsan"
}).then(function (resp){
alert(resp.data);
})
axios({
method:"post",
url:"http://localhost:8080/ajax-demo1/aJAXDemo1",
data:"username=zhangsan"
}).then(function (resp){
alert(resp.data);
});
axios()是用来发送异步请求的,小括号中使用 js的JSON对象传递请求相关的参数:
then() 需要传递一个匿名函数。我们将 then()中传递的匿名函数称为 回调函数,意思是该匿名函数在发送请求时不会被调用,而是在成功响应后调用的函数。而该回调函数中的 resp 参数是对响应的数据进行封装的对象,通过 resp.data 可以获取到响应的数据。
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ajax-Axiostitle>
<script src="js/axios-0.18.0.js">script>
head>
<body>
<input type="button" value="获取数据GET" onclick="get()">
<input type="button" value="删除数据POST" onclick="post()">
body>
<script>
function get(){
//通过axios发送异步请求-get
axios({
method: "get",
url: "http://yapi.smart-xwork.cn/mock/169327/emp/list"
}).then(result => {
console.log(result.data);
})
}
function post(){
// 通过axios发送异步请求-post
axios({
method: "post",
url: "http://yapi.smart-xwork.cn/mock/169327/emp/deleteById",
data: "id=1"
}).then(result => {
console.log(result.data);
})
}
script>
html>
Axios还针对不同的请求,提供了别名方式的api,具体如下:
方法 | 描述 |
---|---|
axios.get(url [, config]) | 发送get请求 |
axios.delete(url [, config]) | 发送delete请求 |
axios.post(url [, data[, config]]) | 发送post请求 |
axios.put(url [, data[, config]]) | 发送put请求 |
我们目前只关注get和post请求,所以在上述的入门案例中,我们可以将get请求代码改写成如下:
axios.get("http://yapi.smart-xwork.cn/mock/169327/emp/list").then(result => {
console.log(result.data);
})
post请求改写成如下:
axios.post("http://yapi.smart-xwork.cn/mock/169327/emp/deleteById","id=1").then(result => {
console.log(result.data);
})