原生ajax的get和post方法封装

get 方法

复制代码
    function serialize (data) {
      if (!data) {
        return '';
      }
      
      var paris = [];
      for (var key in data) {
        if (!data.hasOwnProperty(key) || typeof data[key] === 'function') {
          continue;
        }
        var name = encodeURIComponent(key);
        var value = encodeURIComponent(data[key].toString());
        paris.push(name + '=' + value);
      }
      return paris.join('&');
    }

    function get (url, options, callback) {
      var req;
      if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
      } else if (window.ActiveXObject) { // 兼容IE7及以下版本
        req = new ActiveXObject();
      }
      
      req.onreadystatechange = function () {
        if (req.readyState === 4) {
          if (req.status === 200) {
            console.log('请求成功');
            callback(req.response);
          }
        } else {
          console.log('请求中...');
        }
      }
      
      // 将传递的参数序列化
      if (serialize(options) !== '') {
        url = url + '?' + serialize(options);
      }

      req.open('get', url);
      req.send(null);
    }
复制代码

 post方法

复制代码
    function serialize (data) {
      if (!data) {
        return '';
      }
      
      var paris = [];
      for (var key in data) {
        if (!data.hasOwnProperty(key) || typeof data[key] === 'function') {
          continue;
        }
        var name = encodeURIComponent(key);
        var value = encodeURIComponent(data[key].toString());
        paris.push(name + '=' + value);
      }
      return paris.join('&');
    }

    function post (url, options, callback) {
      var req;
      if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
      } else if (window.ActiveXObject) { // 兼容IE7及以下版本
        req = new ActiveXObject();
      }
      
      req.onreadystatechange = function () {
        if (req.readyState === 4) {
          if (req.status === 200) {
            console.log('请求成功');
            callback(req.response);
          }
        } else {
          console.log('请求中...');
        }
      }

      req.open('post', url);
      req.send(serialize(options));
    }
复制代码

get与post方法结合

复制代码
    function serialize (data) {
      if (!data) {
        return '';
      }
      
      var paris = [];
      for (var key in data) {
        if (!data.hasOwnProperty(key) || typeof data[key] === 'function') {
          continue;
        }
        var name = encodeURIComponent(key);
        var value = encodeURIComponent(data[key].toString());
        paris.push(name + '=' + value);
      }
      return paris.join('&');
    }

    function request (method, url, options, callback) {
      var req;
      if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
      } else if (window.ActiveXObject) { // 兼容IE7及以下版本
        req = new ActiveXObject();
      }
      
      req.onreadystatechange = function () {
        if (req.readyState === 4) {
          if (req.status === 200) {
            console.log('请求成功');
            callback(req.response);
          }
        } else {
          console.log('请求中...');
        }
      }
      
      url = method === 'get' && serialize(options) !== '' ?  url + '?' + serialize(options) : url;
      let sendParams = method === 'get' ? null : serialize(options);
      
      req.open(method, url);
      req.send(sendParams);
    }
复制代码
posted @   QiuXZ  阅读(614)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示