在javascript中,使用promise封装ajax
·
ajax的核心作用
局部刷新
get请求
let xhr = new XMLHttpRequest()
// 发送请前的信息
xhr.open('get', "http://localhost:3000/get?name=1&age=2", true)//默认true为异步
// 监听 服务端响应信息
xhr.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (xhr.readyState === 4) { // 0 1 2 3 4
// 判断响应结果:
if (xhr.status === 200) {
// 成功,通过responseText拿到响应的文本:
console.log(xhr.response)
console.log(xhr.responseText)
console.log(xhr.responseXML)
console.log(xhr.getResponseHeader)//响应头信息
console.log(xhr.getAllResponseHeaders)
} else {
// 失败,根据响应码判断失败原因:
console.log(xhr.status)
}
} else {
// HTTP请求还在继续...
}
}
xhr.send(null)
post请求
let xhr = new XMLHttpRequest()
// 初始化
xhr.open('post', "http://localhost:3000/post", true)
// 发送请求
xhr.setRequestHeader('content-Type', 'application/x-www-form-urlencoded')
xhr.onreadystatechange = function () { // 状态发生变化时,函数被回调
if (xhr.readyState === 4) { // 成功完成
// 判断响应结果:
if (xhr.status === 200) {
// 成功,通过responseText拿到响应的文本:
console.log(xhr.responseText)
} else {
// 失败,根据响应码判断失败原因:
console.log(xhr.status)
}
} else {
// HTTP请求还在继续...
}
}
xhr.send('name=1&age=2')
/*
xhr.setRequestHeader('content-Type', 'application/json')
xhr.send(JSON.stringify({name:'1ewqrwer'}))
*/
用promise封装ajax
let axios = {
get(url, data) {
return new Promise(function (resolve, reject) {
let xhr = new XMLHttpRequest();
let query = '';
let flag = typeof data === 'object' && !Array.isArray(data)
let keys = Object.keys(data);
if (flag && keys.length > 0) {
query = '?'
keys.forEach((key) => {
query += `${key}=${data[key]}&`;
})
query = query.slice(0, query.length - 1);
}
xhr.open('get', url + query, true);
xhr.send(null)
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) { // 成功完成
if (xhr.status === 200) {
resolve(xhr.responseText)
} else {
reject(xhr.status)
}
} else {
// HTTP请求还在继续...
}
}
})
},
post(url, data) {
return new Promise(function (resolve, reject) {
let xhr = new XMLHttpRequest();
let query = null;
let flag = typeof data === 'object' && !Array.isArray(data)
let keys = Object.keys(data);
if (flag && keys.length > 0) {
query = '';
keys.forEach((key) => {
query += `${key}=${data[key]}&`;
})
query = query.slice(0, query.length - 1);
}
xhr.open('post', url, true);
xhr.setRequestHeader('content-Type', 'application/x-www-form-urlencoded')
xhr.send(query)
xhr.onreadystatechange = function () {
if (xhr.readyState === 4) { // 成功完成
if (xhr.status === 200) {
resolve(xhr.responseText)
} else {
reject(xhr.status)
}
} else {
// HTTP请求还在继续...
}
}
})
}
}
axios.get('http://localhost:3000/get', { name: 1, age: 2 }).then(res => {
console.log(res);
})
axios.post('http://localhost:3000/post', { name: 1, age: 2 }).then(res => {
console.log(res);
})
更多推荐



所有评论(0)