面向对象ajax函数的封装

Posted 贪吃ღ大魔王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象ajax函数的封装相关的知识,希望对你有一定的参考价值。

面向对象ajax函数的封装

1 提取参数,进行穿递
2 找到get和post异同点
一样的地方公用 不一样的区别处理

    class axios {
            static get(url, data, cb) {
                axios.http('get', url, data, cb);
            }
            static post(url, data, cb) {
                axios.http('post', url, data, cb);
            }
            static http(type, url, data, cb) {
            // 参数样式   name=zs&age=18
                let param = '';
                for (let attr in data) {
                //console.log(attr, data[attr]);
                    param += attr + '=' + data[attr] + '&';
                }
                param = param.slice(0, param.length - 1);
                let xhr = new XMLHttpRequest;
                // 设置请求
                url = type == 'get' ? url + '?' + param : url;
                xhr.open(type, url);
                 // 设置请求头
                type == 'post' && xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')
                 // 发送请求
                xhr.send(type == 'post' && param);
                // 监听请求
                xhr.onreadystatechange = function () {
                    if (xhr.readyState == 4) {
                        if (xhr.status == 200) {
                            cb(xhr.response);
                        }
                    }
                }
            }
        }
  axios.get('./ajax.php', { name: 'zs', age: 18 }, (res) => {
            console.log(111);

        })
        axios.post('./ajax.php', {
            name: 'zs', age: 18
        }, (res) => {
            console.log(999);

        })

实现:
在这里插入图片描述
在这里插入图片描述


promise对封装的ajax改造:
 class axios {

      static get(url, data, cb) {
        return axios.http('get', url, data, cb);
      }
      static post(url, data, cb) {
        return axios.http('post', url, data, cb)
      }
      static http(type, url, data, cb) {
        return new Promise(function (resolve, reject) {
          // 参数样式   name=zs&age=18
          let param = '';
          for (let attr in data) {
            //console.log(attr, data[attr]);
            param += attr + '=' + data[attr] + '&'
          }
          param = param.slice(0, param.length - 1);

          // console.log(param);
          // return;
          let xhr = new XMLHttpRequest();
          // 设置请求
          url = type == 'get' ? url + '?' + param : url;
          // console.log(url);


          xhr.open(type, url);
          // 设置请求头
          type == 'post' && xhr.setRequestHeader('content-type', 'application/x-www-form-urlencoded')

          // 发送请求
          xhr.send(type == 'post' && param);

          // 监听请求
          xhr.onreadystatechange = function () {
            if (xhr.readyState == 4) {
              if (xhr.status == 200)
                //  console.log(xhr.response);
                // cb(xhr.response);
                resolve(xhr.response)
              else
                reject('服务器挂了....')
            }
          }
        })

      }
    }

    axios.get('./12-server.php', {
      name: 'zs',
      age: 18
    }).then(res => {
      console.log(res);

    }).catch(res => {
      console.log(res);

    })

以上是关于面向对象ajax函数的封装的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

面向对象入门(封装)

面向对象

面向对象编程

函数封装及面向对象