js习题(用原生js封装Ajax函数)

以下是js代码:

/**
 * 处理data参数
 * @param data{Object} 需要发送到服务的数据
 * @return {String} 返回拼接好的查询字符串
 * @author 不知猫 2020/10/26
 */
function resolveData(data) {
  const arr = [];
  for (let key in data) {
    arr.push(key + '=' + data[key]);
  }
  return arr.join('&');
}

/**
 * 封装Ajax函数
 * @param options{Object} 需要有请求类型,请求地址,回调函数,[参数]
 */
function myAjax(options) {
  //1.创建一个XMLHttpRequest的实例对象
  let xhr = new XMLHttpRequest();
  //2.把需要传给服务器的数据从对象类型转换成查询字符串类型
  let queryStr = resolveData(options.data);
  //3.判断请求类型,对应xhr对象的不同操作
  if (options.method.toUpperCase() === 'GET') {
    //发起GET请求
    //调用open函数,指定请求方式与url
    xhr.open(options.method, options.url + '?' + queryStr);
    //调用send函数,发情ajax请求
    xhr.send();
  } else if (options.method.toUpperCase() === 'POST') {
    //发起POST请求
    //调用open函数,指定请求方式与url
    xhr.open(options.method, options.url);
    //设置Content-Type属性
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //调用send函数,发送ajax请求,并将查询字符串作为参数传入里面
    xhr.send(queryStr);
  }

  //监听onreadystatechange事件
  xhr.onreadystatechange = function () {
    //判断是否有服务器的响应数据
    if (xhr.readyState === 4 && xhr.status === 200) {
      //将响应的数据由JSON字符串格式解析成对象格式
      let result = JSON.parse(xhr.responseText);
      //调用执行请求成功之后的回调函数,并把响应的数据作为参数传入里面
      options.success(result);
    }
  };
}

以下是html代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 第一步:导入自定义的ajax函数库 -->
    <script src="./js/myAjax.js"></script>
</head>

<body>
    <script>
        // 第二步:调用自定义的myAjax函数,发起Ajax数据请求
        myAjax({
            method: 'GET',
            url: 'http://www.liulongbin.top:3006/api/getbooks',
            // data: {/*"请求参数对象"*/ },
            success(res) {//成功的回调函数
                console.log(res);//打印数据
            }
        })

        /*  myAjax({
             method: 'POST',
             url: 'http://www.liulongbin.top:3006/api/addbook',
             data: { bookname: 'kk', author: 'hhe', publisher: '11' },
             success(res) {//成功的回调函数
                 console.log(res);//打印数据
             }
         }) */
    </script>
</body>

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值