/*
xhr + promise 封装一个异步ajax请求的通用函数 简洁版
ajax ('xxx.json')
*/
function ajax(url) {
return new Promise((resolve, reject) => {
// 创建一个XHR对象
const xhr = new XMLHttpRequest()
// 初始化一个异步请求(还没发请求)
xhr.open('GET', url, true)
// 绑定状态改变的监听
xhr.onreadystatechange = function () {
/*
ajax引擎得到响应数据后
将xhr的readyState属性指定为4
将响应数据保存在response / responseText属性上
调用此回调函数
*/
// 如果状态值不为4, 直接结束(请求还没有结束)
if (xhr.readyState !== 4) {
return
}
// 如果响应码在200~~299之间, 说明请求都是成功的
if (xhr.status>=200 && xhr.status<300) {
// 指定promise成功及结果值
resolve(JSON.parse(xhr.responseText))
} else { // 请求失败了
// 指定promise失败及结果值
reject(new Error('request error staus '+ request.status))
}
}
xhr.send()
})
}
使用:
// 使用async/await语法
async function fetchData() {
try {
const data = await ajax('https://example.com/api/data.json');
console.log('Received data:', data);
// 在这里处理获取到的数据
} catch (error) {
console.error('Failed to fetch data:', error.message);
// 在这里处理错误情况
}
}
fetchData();
// 或者使用Promise链式调用
ajax('https://example.com/api/data.json')
.then(data => {
console.log('Received data:', data);
// 在这里处理获取到的数据
})
.catch(error => {
console.error('Failed to fetch data:', error.message);
// 在这里处理错误情况
});