1. 实现方法

  • 创建一个XmlhttpRequest对象
  • 然后在使用创建好的对象下的open方法,创建一个http请求信息
  • 然后再设置请求头的信息 比如是content-type
  • 设置响应http请求状态变化的函数onreadstatechange
  • 发送http请求,使用send方法
  • 获取异步调用时返回的结果
  • 然后对页面进行局部的数据更新操作

    2. 请求状态码

  • 0 未初始化状态

  • 1 初始化状态
  • 2 发送数据的状态
  • 3 接受数据的状态
  • 4 完成状态

3. 封装方法

  1. unction ajax(params) {
  2. // 给ajax设定一个默认值
  3. let defaults = {
  4. type: 'get',
  5. url: '',
  6. data: {},
  7. header: {
  8. 'Content-Type': 'application/json'
  9. },
  10. success: (data) => {},
  11. error: (data) => {}
  12. }
  13. // 使用Object.assign()方法 将之间的对象覆盖
  14. Object.assign(defaults,params)
  15. let xhr = new XMLHttpRequest();
  16. let options = ''
  17. for (let attr in params.data) {
  18. options += attr + '=' + defaults.data[attr] + '&'
  19. }
  20. options = options.substr(0, defaults.length - 1)
  21. // console.log(options)
  22. if (defaults.type === 'get') {
  23. defaults.url = defaults.url + '?' + options
  24. }
  25. xhr.open(defaults.type, defaults.url)
  26. if (defaults.type == 'post') {
  27. let contentType = defaults.header['Content-Type']
  28. xhr.setRequestHeader('Content-Type', contentType)
  29. if (contentType === 'application/json') {
  30. xhr.send(JSON.stringify(defaults.data))
  31. } else {
  32. xhr.send(options)
  33. }
  34. } else {
  35. xhr.send()
  36. }
  37. xhr.onload = () => {
  38. // 对http的状态码进行判断如果状态码为200则调用success函数,如果失败则调用error函数
  39. if (xhr.status == 200) {
  40. let responseHeader = xhr.getResponseHeader('Content-Type')
  41. let resText = xhr.responseText
  42. if (responseHeader.includes('application/json')) {
  43. resText = JSON.parse(resText)
  44. }
  45. defaults.success(resText, xhr)
  46. } else {
  47. defaults.error(resText, xhr)
  48. }