封装自己的Ajax函数

2021-05-09  本文已影响0人  過尽千帆_YL

1. 要实现的效果

// <!-- 1.导入自定义的ajax函数 -->
 <script src="./js/itheima.js"></script> 

  <script>
     // 调用自定义的 myAjax 函数,发起ajax函数请求
    myAjax({
      method: '请求类型',
      url: '请求地址',
      data: {
       // '请求参数对象'
      },
      success: function (res) {  // 成功的回调函数
        console.log(res)  // 打印数据
      }
    })
  </script>

2. 定义options参数选项

myAjax() 函数是我们自定义的 Ajax 函数,它接收一个配置对象作为参数,配置对象中可以配置如下属性:

3 .处理data参数

需要把 data 对象,转化成查询字符串的格式,从而提交给服务器,因此提前定义 resolveData 函数如下:

/**
 *
 * @param {*} data 将对象转成查询字符串
 * username=张三&age=20
 */
// 将对象转为查询字符串
function resolveData(data) {
  var arr = [];
  for (var key in data) {
    var str = key + '=' + data[key]; //key=value
    arr.push(str);
  }
  return arr.join('&'); //将数组转为字符串并以&分隔
}

4. 定义 myAjax 函数

在 myAjax() 函数中,需要创建 xhr 对象,并判断请求的类型,对请求类型进行 if … else … 的判断:

function myAjax(options) {
  //1.创建xhr对象
  let xhr = new XMLHttpRequest();
  var params = resolveData(options.data);
  //判断请求方式是GET 还是post
  //toUpperCase() 方法用于把字符串转换为大写。
  if (options.type.toUpperCase() == 'GET') {
    //2.调用open    options.url + '?' + params
    xhr.open(options.type, params ? options.url + '?' + params : options.url);
    xhr.send();
  } else if (options.type.toUpperCase() == 'POST') {
    xhr.open(options.type, options.url);
    //3.设置请求头
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    //4.设置数据
    xhr.send(params);
  }

5 .监听注册事件

监听 onreadystatechange 事件:

  // 注册监听
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4 && xhr.status === 200) {
      // 把服务器的json字符串转成js对象
      var obj = JSON.parse(xhr.responseText);
      options.success && options.success(obj);
    }
  };
}
上一篇 下一篇

猜你喜欢

热点阅读