发送Ajax请求的三种方式什么是 Ajax ajax 全称 async javaScript and xml,是一种异步
什么是 Ajax
ajax 全称 async javaScript and xml,是一种异步的创建交互式网页技术,它能与服务器交换数据,而不中断用户的操作,使得网页可以在不重新加载整个页面的情况下更新内容
接下来我们就用ajax技术获取指定接口中的数据,实现点击按钮就显示电影列表数据的效果
XMLHttpRequest 基础版
三个步骤:
- 获取页面上的button按钮和ul列表DOM结点
- 为按钮订阅一个click事件
- 朝指定接口发送请求,获取到数据渲染在页面上
<html lang="en">
<body>
<button id="btn">获取电影列表</button>
<ul id="list">
</ul>
<script>
// 获取页面上的按钮和列表
let btn = document.getElementById('btn')
let ul = document.getElementById('list')
// 订阅一个click事件
btn.addEventListener('click',() => {
// 朝指定接口发送请求,获取到数据渲染在页面上
let xhr = new XMLHttpRequest();
xhr.open('GET','https://mock.mengxuegu.com/mock/65a91543c4cd67421b34c898/movie/movieList#!method=get',true)
xhr.send()
xhr.onreadystatechange = () => {
if(xhr.readyState == 4 && xhr.status == 200){
const movieList = JSON.parse(xhr.responseText).movieList
// 展示在页面上
for(let i = 0;i < movieList.length;i++){
// movieList[i]
const li = document.createElement('li');
li.innerText = movieList[i].nm + '--' + movieList[i].star // 拼接电影名和演员为一个字符串
ul.appendChild(li); // 添加一个子标签/子结点
}
}
}
})
</script>
</body>
</html>
let xhr = new XMLHttpRequest()
:创建一个ajax实例,驱使浏览器朝后端发送一个请求xhr.open('GET', 'xxx', true)
:配置发送请求的参数,向地址xxx发送GET请求, "true"表示是否要开启异步xhr.onreadystatechange = () => {}
:监听请求的过程xhr.readyState == 4 && xhr.status == 200
:ajax状态为4并且状态码为200,代表拿到了后端返回的数据JSON.parse(xhr.responseText).movieList
:把请求回来的数据字符串转换成一个对象
readyState —— ajax的五种状态
0 -- xhr刚创建,即
xhr = new XMLHttpRequest()
被执行的时候1 -- open执行,配置已经生效
2 -- 请求发送出去,响应头被接收
3 -- 响应体正在解析
4 -- 解析完成
jquery 封装版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 引入 jQuery 库的 CDN 链接 -->
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
</head>
<body>
<button id="btn">jq获取电影列表</button>
<ul id="list">
</ul>
<script>
// 获取页面上的按钮和列表
let btn = document.getElementById('btn')
let ul = document.getElementById('list')
// 订阅一个click事件
btn.addEventListener ('click',() => {
$.ajax({
url: 'https://mock.mengxuegu.com/mock/65a91543c4cd67421b34c898/movie/movieList#!method=get',
method: 'GET',
data: {
username: '今天一定晴q',
age: 18
},
success: function (res) {
console.log(res);
const movieList = res.movieList
for(let i = 0;i < movieList.length;i++){
const li = document.createElement('li');
li.innerText = movieList[i].nm + '--' + movieList[i].star
ul.appendChild(li);
}
}
})
})
</script>
</body>
</html>
主要是发送请求、获取数据的逻辑因为 jquery API 的封装变得更加简洁了:
$.ajax({ ... })
:使用 jQuery 的 $.ajax
方法发起一个请求,在里面指定接口地址、请求方法和data发送给服务器的数据即传参,当请求成功时执行 success 回调函数,函数中执行将电影列表数据渲染到页面的逻辑代码
fetch 封装版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="btn">fetch获取电影列表</button>
<ul id="list">
</ul>
<script>
let btn = document.getElementById('btn')
let ul = document.getElementById('list')
btn.addEventListener ('click',() => {
fetch("https://mock.mengxuegu.com/mock/65a91543c4cd67421b34c898/movie/movieList?username='今天一定晴q'&age=18")
.then((res) => {
console.log(res); // 没有被解析完全的响应体
return res.json() //格式化成响应体对象
})
.then((data) => {
console.log(data);
const movieList = data.movieList
for(let i = 0;i < movieList.length;i++){
const li = document.createElement('li');
li.innerText = movieList[i].nm + '--' + movieList[i].star
ul.appendChild(li);
}
})
})
</script>
</body>
</html>
利用 fetch 去发送ajax请求的代码读起来就更加的语义化了:向接口地址 fetch 请求,然后得到响应体再解析,然后拿到我们想要的数据渲染到页面上
如果发送请求的同时要传参的话,就在接口地址后面添加一个 ?
接上要传递的参数
以上就是发送ajax请求的三种方法啦,在开发过程中可以选择任意一种使用,希望对您有所帮助!
转载自:https://juejin.cn/post/7413189674108747817