ajax Pormise封装管理

ajxa 使用起来不如 axios 方便配置和抽离,反复配置很难受,模仿着经常 封装 axios 的样子,封装个 ajax 配置,封装文件分为:

1. ajax 抽离文件

  • request.js ajxa配置文件
  • api.js 多接口的封装文件
/* 1. 创建个 ajax  promise 对象 */
const ajax = (option) => {
  return new Promise((reslove, rejetc) => {
    // 1. 格式化数据
    let param = formParam(option.data);

    // 2. 创建对象
    if (window.XMLHttpRequest) {
      xhr = new XMLHttpRequest();
    } else {
      xhr = new ActiveXObject("Microsoft.XMLHTTP");
    }

    // 3. 配置

    /* 设置公共请求头携带参数 */

    // 6. 格式化数据方法
    function formParam(data) {
      let arr = [];
      for (let prop in arr) {
        /* GET 方法,讲参数按照 格式序列化,加入到数组 */
        arr.push(`${prop}=${data[prop]}`);
      }
      /* 转为 字符串 & 隔开 */
      return arr.join("&");
    }

    /* 设置请求时长 */
    xhr.timeout = 500;

    /* 发起请求 */
    if (option.type == "get") {
      /* GTE 方法拼接链接,send 参数 null */
      xhr.open(option.type, option.url + "?" + param, true);
      xhr.setRequestHeader("token", option.token);
      xhr.setRequestHeader("aid", option.aid);
      xhr.send(null);
    } else if (option.type == "post") {
      /* POST 方法 ,参数放在 send 内 ,  切设置请求头 */
      xhr.open(option.type, option.url, true);
      xhr.setRequestHeader("Content-type", "multipart/form-data");
      xhr.setRequestHeader("token", option.token);
      xhr.setRequestHeader("aid", option.aid);
      xhr.send(option.data);
    }

    // 5. 接收返回参数
    xhr.onreadystatechange = () => {
      //  readyState=4  代表已发送请求
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          reslove(JSON.parse(xhr.responseText));
        } else {
          rejetc(JSON.parse(xhr.responseText));
        }
      }
    };
  });
};

2. api.js 按需使用接口

单独抽离管理的 接口请求,使用时,传入 option 配置即可

let textDOM = document.querySelector("#text");
let btn = document.querySelector("#btn");
let textBox = document.querySelector(".textBox");
let table_list = document.querySelector("#table_list");
let msg = null;

function requsetMSG() {
  /* 请求接口 */
  let option = {
    type: "post",
    url: "http://okkk.221320.bcc/admin.php?c=index&a=asdsa",
    data: {
      pageIndex: "2",
      pageSize: "20",
    },
    token: "2030632asdsaded939",
    aid: "+mnasdasSKmyL5L+iasdasMstkz",
  };

  ajax(option)
    .then((res) => {
      console.log("---------响应成功------------");
      msg = res.data.list;
      // console.log(msg);
      createEle();
    })
    .catch((err) => {
      console.log("---------响应失败------------");
      console.log(err);
    });
}

btn.addEventListener("click", function () {
  requsetMSG();
  console.log("ok");
});

/* 循环渲染标签 */
function createEle() {
  console.log(msg);
  /* 渲染追加行html */
  msg.forEach((item) => {
    let tr_tag = document.createElement("tr");
    let inHTML = `
    <td> ${item.year}-${item.month} </td>
    <td> ${item.added_money}</td>
    <td> ${item.arrival_money}</td>
    <td> ${item.arrival_money_percent.percent}</td>
    `;
    tr_tag.innerHTML = inHTML;
    table_list.appendChild(tr_tag);
  });
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值