概念
- Ajax是一种
异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助。简单地说,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来。
Asynchronous Javascript And XML (异步的JavaScript和XML)
应用场景
- 数据表单验证
- 按需获取数据
- 自动更新页面
- jsonp
原理
- 依赖浏览器提供的XMLHttpRequest对象,使得浏览器可以发出HTTP请求与接收HTTP响应。浏览器接着做其他事情,等收到XHR返回来的数据再渲染页面。
原生Ajax
const SERVER_url = '/server';
let xhr = new XMLHttpRequest();
xhr.open('Get', SERVER_url, true);
xhr.onreadystatechange = function() {
if (this.readyState !== 4) return;
if (this.status >= 200 && this.status <= 300) {
handle(this.response)
} else {
console.error(this.statusText);
}
}
xhr.onerror = function() {
console.error(this.statusText);
}
xhr.responseType = 'json'
xhr.setRequestHeader('Accept', 'application/json');
xhr.send(null);
JQuery使用
$.ajax({
async: true,
type: "POST",
url: url,
timeout: 1000,
data: ,
dataType: "json",
contentType: , 发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。
beforeSend(xhr),
success(result,status,xhr),
error(xhr,status,error),
complete(xhr,status), 请求完成时运行的函数(在请求成功或失败之后均调用,即在success 和 error 函数之后)。
});
Promise封装Ajax
function getjson(url) {
let promise = new Promise(function(resolve, reject) {
let xhr = new XMLHttpRequest();
xhr.open('Get', SERVER_url, true);
xhr.onreadystatechange = function() {
if (this.readyState !== 4) return;
if (this.status >= 200 && this.status <= 300) {
resolve(this.response)
} else {
reject(this.statusText);
}
}
xhr.onerror = function() {
reject(this.statusText);
}
xhr.responseType = 'json'
xhr.setRequestHeader('Accept', 'application/json');
xhr.send(null);
})
return promise
}
优点
- 减轻服务器的负担,按需取数据,最大程度的减少冗余请求。
局部刷新页面,减少用户心理和实际的等待时间,带来更好的用户体验。
- 基于xml标准化,并被广泛支持,不需安装插件等,进一步促进页面和数据的分离。
缺点
- 属 js 原生,基于XHR(XMLHttpRequest)进行开发,XHR 结构不清晰。
针对 mvc 编程,由于近来vue和React的兴起,不符合mvvm前端开发流程。
- 单纯使用 ajax 封装,核心是使用 XMLHttpRequest 对象,使用较多并有先后顺序的话,
容易产生回调地狱
参考资料