axios封装了ajax,封装一个基于axios的 Ajax

/* index.js */

/* GET请求 */

function testGet() {

axios({

url:'http://localhost:3000/posts',

method:'GET',

params:{

id:2,

xxx:"abc"

}

}).then(response=>{

console.log(response);

},error=>{

console.log(error.message);

})

}

/* Post请求 */

function testPost() {

axios({

url:'http://localhost:3000/posts',

method:'POST',

data:{

"title": "json-server----","author": "typicode----"

}

}).then(response=>{

console.log(response);

},error=>{

console.log(error.message);

})

}

/* PUT请求 */

function testPut() {

axios({

url:'http://localhost:3000/posts/2',

method:'PUT',

data:{

"title": "json-server666","author": "typicode666"

}

}).then(response=>{

console.log(response);

},error=>{

console.log(error.message);

})

}

/* Delete请求 */

function testDelete() {

axios({

url:'http://localhost:3000/posts/6',

method:'DELETE',

data:{

"title": "json-server----","author": "typicode----"

}

}).then(response=>{

console.log(response);

},error=>{

console.log(error.message);

})

}

/* 封装一个ajax基于axios */

function axios({

url,

method,

params={},

data={}

}) {

// 返回一个promise对象

return new Promise((resolve,reject)=>{

// 处理method 转换为大写

method = method.toUpperCase()

let queryString = ''// 处理query参数(拼接到url上) id=1&xxx=abc

Object.keys(params).forEach(v=>{

queryString+=`${v}=${params[v]}&`

})

if(queryString){

queryString = queryString.substring(0,queryString.length-1)

url += '?' + queryString

}

// 1. 执行异步ajax请求

const request = new XMLHttpRequest()// 1.1. 创建xhr对象

request.open(method,url,true)// 1.2. 打开链接(初始化请求, 没有请求)

// 1.3. 发送请求

if(method==='GET'||method==='DELETE'){

request.send()

}else if(method==='POST'||method==='PUT'){

request.setRequestHeader('Content-Type','application/json;charset=utf-8')// 告诉服务器请求体的格式是json

request.send(JSON.stringify(data)) // 发送json格式请求体参数

}

// 1.4 绑定状态改变的监听

request.onreadystatechange = function(){

// 如果请求没有完成, 直接结束

if(request.readyState!==4){

return

}

// 如果响应状态码在[200,300)之间代表成功, 否则失败

const {status,statusText} = request

// 2. 如果调用成功了, 调用 resolve

if(status>=200 && status<=299){

// 准备结果数据对象response

const response = {

data:JSON.parse(request.response),// 响应体(装换为json格式)

status,// 响应状态码

statusText// 响应文本

}

resolve(response)

}else{ // 3. 如果调用失败了, 调用 reject

reject(new Error('request error status' + status))

}

}

})

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值