1. 通过回调函数的方式封装 Ajax
// callbackconst Ajax = ({ method = 'get', url = '/', data, async = true}, callback) => { let xhr = new XMLHttpRequest() xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status === 200) { let res = JSON.parse(xhr.responseText) callback(res) } } xhr.open(method, url, async) if (method === 'get') { xhr.send() } if (method === 'post') { let type = typeof data let header if (type === 'string') { header = 'application/x-www-form-urlencoded' } else { header = 'application/json' data = JSON.stringify(data) } xhr.setRequestHeader('Content-type', header) xhr.send(data) }}Ajax.get = (url, callback) => { return Ajax({ url }, callback)}Ajax.get('http://localhost:3000/getData', (res) => { console.log(res)})}
2. 通过 promise 封装
const Ajax = function(url) { return new Promise((resolve, reject) => { let xhr = null; if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); } else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } xhr.onreadystatechange = () => { if (xhr.readyState === 4 && xhr.status === 200) { let res = JSON.parse(xhr.responseText) resolve(res) } else { reject(xhr.responseText) } } if (method === 'get') { xhr.send() } if (method === 'post') { let type = typeof data let header if (type === 'string') { header = 'application/x-www-form-urlencoded' } else { header = 'application/json' data = JSON.stringify(data) } xhr.setRequestHeader('Content-type', header) xhr.send(data) } })}