封装ajax

html部分  

<script src="./itheima.js"></script>

  <script>

    //get 请求方式

    itheima({

      method: 'get',

      url: 'http://www.liulongbin.top:3009/api/get',

      params: { name: 'jack', age: 4 },

      success: function (res) {

        console.log(res);

      }

    })

    //post 请求方式

    const fd = new FormData()

    fd.append('name', 'rose')

    fd.append('age', 21)

    itheima({

      method: 'post',

      url: 'http://www.liulongbin.top:3009/api/post',

      // data: fd,

      // data: `name=rose&age=21`,

      data: { name: 'rose', age: 21 },

      success: function (res) {

        console.log(res);

      }

    })

  </script>

JS 部分

function itheima(opts) {

  // 1

  const xhr = new XMLHttpRequest()

  // 处理params

  if (opts.params) {

    //对象转换为数组,再转换为字符串

    //{name:'jack',age:18}=>['name=jack','age=18']=>name=jack&age=18

    const arr = []

    //for in 遍历数组

    for (let k in opts.params) {

      arr.push(`${k}=${opts.params[k]}`)

    }

    if (arr.length > 0) {

      opts.url = opts.url + `?${arr.join('&')}`

    }

    console.log(opts.url)

  }

  // 2 xhr.形参(方式,地址)

  xhr.open(opts.method, opts.url)

  // 处理data 判断opts.data类型是什么

  if (opts.method.toUpperCase() === 'POST' && opts.data) {

    // 处理data为formdata格式

    if (opts.data instanceof FormData) {

      xhr.send(opts.data)

    }

    // 字符串类型

    else if (typeof opts.data === 'string') {

      xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

      xhr.send(opts.data)

    }

    // 对象类型

    else if (opts.data instanceof Object) {

      xhr.setRequestHeader('Content-Type', 'application/json')

      xhr.send(JSON.stringify(opts.data))

    }

  } else {

    // 3

    xhr.send()

  }


 

  // 4

  xhr.addEventListener('load', function () {

    opts.success(JSON.parse(xhr.response))

  })

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值