一、AJAX原理 -XMLHttpRequest
定义:
XMLHttpRequest(XHR)对象用于与服务器交互。通过 XMLHttpRequest 可以在不刷新页面的情况下请求特定 URL,获取数据。这允许网页在不影响用户操作的情况下,更新页面的局部内容。XMLHttpRequest 在AJAX 编程中被大量使用。
**关系:**axios 内部采用 XMLHttpRequest 与服务器交互
二、使用XMLHttpRequest
步骤:
1.创建 XMLHttpRequest 对象
2.配置请求方法和请求 url 地址
3监听 loadend 事件,接收响应结果
4.发起请求
三、XMLHttpRequest - 查询参数
定义:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据
语法:http://xxxx.com/xxx/xxx?参数名1=值1\&参数名2=值2
四、案例
需求: 地区查询案例:输入省份和城市名字,查询地区列表
<!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>案例_地区查询</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css">
<style>
:root {
font-size: 15px;
}
body {
padding-top: 15px;
}
</style>
</head>
<body>
<div class="container">
<form id="editForm" class="row">
<!-- 输入省份名字 -->
<div class="mb-3 col">
<label class="form-label">省份名字</label>
<input type="text" value="北京" name="province" class="form-control province" placeholder="请输入省份名称" />
</div>
<!-- 输入城市名字 -->
<div class="mb-3 col">
<label class="form-label">城市名字</label>
<input type="text" value="北京市" name="city" class="form-control city" placeholder="请输入城市名称" />
</div>
</form>
<button type="button" class="btn btn-primary sel-btn">查询</button>
<br><br>
<p>地区列表: </p>
<ul class="list-group">
<!-- 示例地区 -->
<li class="list-group-item"></li>
</ul>
</div>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
/**
* 目标: 根据省份和城市名字, 查询对应的地区列表
*/
document.querySelector('.sel-btn').addEventListener('click', () => {
const pname = document.querySelector('.province').value
const cname = document.querySelector('.city').value
//查询参数对象
const qobj = {
pname,
cname
}
//查询参数对象转换为查询参数字符串
const paramsObj = new URLSearchParams(qobj)
const queryString = paramsObj.toString()
console.log(queryString)
//使用xhr对象,查询地区列表
const xhr = new XMLHttpRequest()
xhr.open('get', `http://ajax-api.itheima.net/api/area?${queryString}`)
xhr.addEventListener('loadend', () => {
console.log(xhr.response)
const data = JSON.parse(xhr.response)
console.log(data)
const htmlStr = data.data.map(areaName => {
return `
<li class="list-group-item">${areaName}</li>
`
}).join('')
document.querySelector('.list-group').innerHTML = htmlStr
})
xhr.send()
})
</script>
</body>
</html>