012-AJAX
定义
AJAX 全称是 Asynchronous JavaScript and XML,中文意思是用 JavaScript 执行异步网络请求。在不重载当前网页的情况下,与服务器交换数据,并且更新部分数据。
原理
AJAX 的原理简单来说通过 XmlHttpRequest 对象来向服务器发异步请求,从服务器获得数据,然后用 JavaScript 来操作 DOM 而更新页面。
XmlHttpRequest 属性
XMLHttpRequest.onreadystatechange:它会在XMLHttpRequest.readyState的状态改变时触发。XMLHttpRequest.readyState:返回一个XMLHttpRequest代理当前所处的状态。- 值:0;状态:
UNSENT;描述:代理被创建,但尚未调用open()方法。 - 值:1;状态:
OPENED;描述:open()方法已经被调用。 - 值:2;状态:
HEADERS_RECEIVED;描述:send()方法已经被调用,并且头部和状态已经可获得。 - 值:3;状态:
LOADING;描述:下载中,responseText属性已经包含部分数据。 - 值:4;状态:
DONE;描述:下载操作已完成。
- 值:0;状态:
XMLHttpRequest.responseText:在一个请求被发送后,从服务器端返回文本。
XmlHttpRequest 方法
XMLHttpRequest.open():初始化一个请求。method:使用的HTTP方法,比如GET、POST、PUT、DELETE等。url:要向其发送请求的URL。async:表示是否异步执行操作,默认为true。user:可选的用户名用于认证用途,默认null。password:可选的密码用于认证用途,默认null。
XMLHttpRequest.send():发送HTTP请求。body:在XHR请求中要发送的数据体,如果不传递数据则为null。
如果使用 GET 请求发送数据的时候,需要注意如下:
- 将请求数据添加到
open()方法中的url地址中。 - 发送请求数据中的
send()方法中参数设置为null。
封装
在现代浏览器上写 AJAX 主要依靠 XMLHttpRequest 对象,下面简单封装:
const ajax = function (options) {
const xhr = new XMLHttpRequest()
const option = options || {}
const params = option.data
option.type = (option.type || 'GET').toUpperCase()
option.dataType = option.dataType || 'json'
if (option.type === 'GET') {
xhr.open('GET', `${option.url}?${params}`, true)
xhr.send(null)
} else if (option.type === 'POST') {
xhr.open('POST', option.url, true)
xhr.send(params)
}
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
const { status } = xhr
if (status >= 200 && status < 300) {
option?.success(xhr.responseText, xhr.responseXML)
} else {
option?.fail(status)
}
}
}
}
ajax({
type: 'post',
dataType: 'json',
data: {},
url: 'https://www.example.com',
success(text, xml) {
console.log(text, xml)
},
fail(status) {
console.log(status)
},
})
