update: Ajax封装

This commit is contained in:
qianguyihao 2021-05-20 18:02:53 +08:00
parent 050ff8ae45
commit 40d518a144

View File

@ -80,12 +80,11 @@ xmlhttp.send();
xmlhttp.onreadystatechange = function () {
// 为了保证 数据 完整返回,我们一般会判断 两个值
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
// 如果能够进入这个判断,说明数据请求成功了
//5服务端相应在注册的事件中获取返回的内容并显示在页面上
console.log('数据返回成功');
//5服务端相应如果能够进入这个判断说明数据请求成功了
console.log('数据返回成功:' + JSON.stringify(xmlhttp.responseText));
// 数据是保存在 异步对象的 属性中
console.log(JSON.stringify(xmlhttp.responseText));
// 伪代码:按业务需要,将接口返回的内容显示在页面上
// document.querySelector('h1').innerHTML = xmlhttp.responseText;
}
};
```
@ -114,11 +113,54 @@ xmlhttp.onreadystatechange = function () {
};
```
### 封装Ajax请求重要
### 封装 Ajax 请求重要
todo
上面的代码执行顺序很好理解但在实战开发中是不会这么写的假如你的页面中需要调十次接口那岂不是要手写十遍 Ajax 请求这样会导致大量的重复代码
## Ajax 请求举例
所以我们需要把重复代码封装成一个公共函数然后通过**回调函数**处理成功和失败的逻辑
封装 Ajax 请求的代码如下(get 请求为例)
```js
// 封装 Ajax为公共函数
function myAjax(url, callback) {
// 1、创建XMLHttpRequest对象
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
// 兼容IE5、IE6浏览器。不写也没关系
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
// 2、发送请求
xmlhttp.open('GET', url, true);
xmlhttp.send();
// 3、服务端响应
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var obj = JSON.parse(xmlhttp.responseText);
console.log('数据返回成功:' + Jobj);
callback(obj);
}
};
}
// 单次调用 ajax
myAjax('a.json', (res) => {
console.log(res);
});
// 多次调用 ajax。接口请求顺序a --> b --> c
myAjax('a.json', (res) => {
console.log(res);
myAjax('b.json', (res) => {
console.log(res);
myAjax('c.json', (res) => {
console.log(res);
});
});
});
```
### Ajax 请求get 请求举例
@ -138,19 +180,32 @@ todo
<script type="text/javascript">
// 绑定点击事件
document.querySelector('#btnAjax').onclick = function () {
// 发送ajax 请求需要五步
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('get', '02-ajax.php');
myAjax('02-ajax.php', (res) => {
console.log(res);
console.log('数据返回成功');
// 显示在页面上
document.querySelector('h1').innerHTML = obj;
// alert(xhr.responseText);
});
};
function myAjax(url, callback) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
}
xmlhttp.open('GET', url, true);
xmlhttp.send();
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
console.log('数据返回成功');
console.log(xmlhttp.responseText);
// 显示在页面上
document.querySelector('h1').innerHTML = xmlhttp.responseText;
if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
var obj = JSON.parse(xmlhttp.responseText);
console.log('数据返回成功:' + Jobj);
callback(obj);
}
};
};
}
</script>
</body>
</html>
@ -168,37 +223,6 @@ todo
![](http://img.smyhvae.com/20180228_1605.gif)
### Ajax 请求post 请求举例
index.html
```html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<h1>Ajax 发送 get 请求</h1>
<input type="button" value="发送put_ajax请求" id="btnAjax" />
<script type="text/javascript">
// 发送ajax 请求需要五步
var xhr = new XMLHttpRequest();
xhr.open('post', '02.post.php');
// 如果想要使用post提交数据,必须添加此行
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send('name=fox&age=18');
xhr.onreadystatechange = function () {
// 这步为判断服务器是否正确响应
if (xhr.readyState == 4 && xhr.status == 200) {
alert(xhr.responseText);
}
};
</script>
</body>
</html>
```
## XMLHttpRequest 对象详解
@ -270,7 +294,6 @@ status
如果响应的是普通字符串就使用 responseText如果响应的是 XML使用 responseXML
## jQuery 中的 Ajax
JQuery 作为最受欢迎的 js 框架之一常见的 Ajax 已经帮助我们封装好了只需要调用即可更为详细的 api 文档可以查阅[w3cSchool_JQueryAjax](http://www.w3school.com.cn/jquery/jquery_ref_ajax.asp)