javascript ajax原生封装

Posted

tags:

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

function Ajax (url, options) {
  // 创建ajax对象
  var xhr = null
  if (window.XMLHttpRequest) {
    xhr = new XMLHttpRequest()
  } else {
    xhr = new ActiveXObject('Microsoft.XMLHTTP') // 兼容ie6
  }

  var type = options.type ? options.type.toUpperCase() : 'GET'
  var data = options.data
  var success = options.success
  var fail = options.fail
  // 用于清除缓存
  var timeStamp = new Date().getTime()
  // data = ['a', 'b', 'c']
  var s = []
  if (typeof data === 'object') {
    for (var key in data) {
      s[ s.length ] = encodeURIComponent(key) + '=' + encodeURIComponent(data[key])
    }
    data = s.join('&')
    // console.log(data)
  }

  if (type === 'GET') {
    if (data) {
      xhr.open('GET', url + '?' + data, true) // 第三个参数async,一个可选的布尔值参数,默认为true,意味着是否执行异步操作
    } else {
      xhr.open('GET', url + '?t=' + timeStamp, true)
    }
    xhr.send()
  } else if (type === 'POST') {
    xhr.open('POST', url, true)
    // 如果需要像 html 表单那样 POST 数据,请使用 setRequestHeader() 来添加 http 头。
    xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded') // jquery 默认为application/x-www-form-urlencoded
    xhr.send(data)
  }

  // 处理返回数据
  xhr.onreadystatechange = function () {
    if (xhr.readyState === 4) {
      if (xhr.status === 200) {
        success && success(xhr.responseText)
      } else {
        if (fail) {
          fail && fail(xhr.status)
        }
      }
    }
  }
}

// 测试调用
var sendData = {name: 'asher', sex: 'male'}
Ajax('data/data.html', {
  data: sendData,
  success: function (data) {
    console.log(data)
  },
  fail: function (error) {
    console.log(error)
  }
})

以上是关于javascript ajax原生封装的主要内容,如果未能解决你的问题,请参考以下文章

原生JavaScript 封装ajax

4原生javascript封装ajax————呱呱二号

JavaScript原生封装ajax请求和Jquery中的ajax请求

JavaScript原生封装ajax请求和Jquery中的ajax请求,内附详细案例和注释!

ajax技术详解,封装一个原生的ajax请求

原生javascript封装类似jquery的ajax请求跨域函数