美文网首页
封装自己的Ajax函数

封装自己的Ajax函数

作者: 過尽千帆_YL | 来源:发表于2021-05-09 09:08 被阅读0次

    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 函数,它接收一个配置对象作为参数,配置对象中可以配置如下属性:

    • 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);
        }
      };
    }
    

    相关文章

      网友评论

          本文标题:封装自己的Ajax函数

          本文链接:https://www.haomeiwen.com/subject/kugpdltx.html