cyr2018

网上看了不少原生的写法,感觉或多或少都有点问题。后面想到可能是写了没有自己测试过。于是就一边参照着,一边自己改下。当然最重要都是测试。没经过测试都代码终究是存在问题的。

第一版get方法

_ajax = (url, data, call, err) => {
    console.log(url, data)
    let xml = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\');
    let arr = [];
    for (let i in data) {
      arr.push(i + \'=\' + data[i]);
    }
    url = url + \'?\' + arr.join(\'&\');
    xml.open(\'get\', url);
    xml.send();
    xml.onreadystatechange = function() {
      let res;
      if ( xml.status === 200 || xml.status === 304) {
        res = JSON.parse(xml.response);
        call && call(res);
      } else {
        const errMessage = { //错误的处理
          errStatus: xml.status,
          errMsg: xml.statusText
        }
        err && err(errMessage);
      }

    }
  }

调用方法:

const a = { operation: 0, b: 1 };
    this._ajax(\' /ofm/storeRules/print\', a, function(res) {
      console.log(res, \'success\');
    }, function(err) {
      console.log(err, \'error\');
    });

  

 

post

_ajax = (url, data, call, err) => {
    console.log(url, data)
    let xml = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\');
    let arr = [];
    for (let i in data) {
      arr.push(i + \'=\' + data[i]);
    }
    xml.open(\'post\', url, true);
    xml.setRequestHeader(\'Content-Type\', \'application/x-www-form-urlencoded\');
    xml.send(arr.join(\'&\'));
    xml.onreadystatechange = function() {
      let res;
      console.log(xml)
      if ( xml.status === 200 || xml.status === 304) {
        res = JSON.parse(xml.response);
        call && call(res);
      } else {
        const errMessage = { //错误的处理
          errStatus: xml.status,
          errMsg: xml.statusText
        }
        err && err(errMessage);
      }

    }
  }

 post这边的请求头需要单独设置,一般设置为

(\'Content-Type\', \'application/x-www-form-urlencoded\')。但是可能存在不同的情况,具体和后端对接修改。

使用

const a = {
      accesstoken: \'***\'
    };
  this._ajax(\'https://cnodejs.org/api/v1/accesstoken\', a, function(res) {
    console.log(res, \'success\');
  }, function(err) {
    console.log(err, \'error\');
  });

 

经过封装的方法

_ajax = (options) => {
    var opt = {
      url: \'\',
      type: \'get\',
      data: {},
      success: function() { },
      error: function() { },
    };
    opt = Object.assign({}, opt, options);
    console.log(opt, \'opt\')
    let xml = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(\'Microsoft.XMLHTTP\');
    let arr = [];
    let data = opt.data;
    for (let i in data) {
      arr.push(i + \'=\' + data[i]);
    }

    if (opt.url) {
      let url = opt.url;
      if (opt.type == \'get\') {
        url = url + \'?\' + arr.join(\'&\');
        xml.open(\'get\', url);
        xml.send();
      }
      if (opt.type == \'post\') {
        xml.open(\'post\', url, true);
        xml.setRequestHeader(\'Content-Type\', \'application/x-www-form-urlencoded\');
        xml.send(arr.join(\'&\'));
      }

      xml.onreadystatechange = function() {
        let res;
        if (xml.status === 200 || xml.status === 304) {
          if (opt.success && opt.success instanceof Function) {
            res = JSON.parse(xml.response);
            opt.success.call(xml, res);
          }

        } else {
          if (opt.error && opt.error instanceof Function) {
            const errMessage = { //错误的处理
              errStatus: xml.status,
              errMsg: xml.statusText
            }
            opt.error.call(xml, errMessage)
          }

        }

      }
    }

  }

 

调用:

const a = {
      accesstoken: \'******\'
    };
    this._ajax({
      url: \'https://cnodejs.org/api/v1/accesstoken\',
      data: a,
      type: \'post\',
      success: function(res) {
        console.log(res, \'success\');
      },
      error: function(err) {
        console.log(err, \'error\');
      }
    });

 

分类:

技术点:

相关文章:

  • 2021-12-13
  • 2021-12-26
  • 2021-11-20
  • 2021-11-20
  • 2021-11-20
  • 2021-11-28
  • 2021-11-20
  • 2022-12-23
猜你喜欢
  • 2021-11-20
  • 2021-11-20
  • 2021-11-04
  • 2021-08-02
相关资源
相似解决方案