原生ajax封装

187 阅读1分钟

基于XMLHttpRequest封装ajax请求

1、封装

//新建一个request.js文件封装
//处理请求参数
function handelJson (json) {
  const arr = []
  for (let key in json) {
    arr.push(key + '=' + json[key])
  }
  const result = arr.join('&') || ''
  return result
}
//请求方法封装
function request (ajax) {
  const {method = 'get', url, data = {}} = ajax
  const http = new XMLHttpRequest() // 创建 XMLHttpRequest 对象
  switch (method.toLowerCase()) {
    case 'get':
      http.open('get', `http://127.0.0.1:8080${url}` + '?' + handelJson(data), true)
      //设置请求头
      http.setRequestHeader('Authorization', 'getToken')
      http.send(null)
      break
    case 'post':
      http.open('post', `http://127.0.0.1:8080${url}`, true)
      //设置请求头
      http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
      http.setRequestHeader('Authorization', 'token')
      //处理并发送请求参数
      http.send(handelJson(data))
      break
  }
  http.onreadystatechange = () => {
    //此处只做简单举例处理,根据实际情况处理结果
    if (http.readyState === 4) { // 已经收到所有的响应
      if (http.status === 200 || http.status === 304) {
        //请求成功
        http.success && http.success(http.responseText)
      } else {
        //请求失败
        http.error && http.error(http.status)
      }
    }
  }
}
export default request

2、使用

import request from '@/utils/request';
request({
    method:'post',
    url:'/system/menu',
    data:{
        name:'系统配置'
    },
    success:res=>{
        //do something
    },
    error:err=>{
        //do something
    }
})