封装自己的Ajax函数

时间:2021-6-4 作者:qvyue

1. 要实现的效果

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

2. 定义options参数选项

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

  • method 请求的类型
  • url 请求的 URL 地址
  • data 请求携带的数据
  • success 请求成功之后的回调函数

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);
    }
  };
}
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。