xhr的网络请求手写简单ajax

Posted cuter、

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xhr的网络请求手写简单ajax相关的知识,希望对你有一定的参考价值。

xhr,全称为XMLHttpRequest,用于与服务器交互数据,是ajax功能实现所依赖的对象,jquery中的ajax就是对 xhr的封装。

XMLHttpRequest

XMLHttpRequest是window的内置对象,因此可以用new创建xhr实例:

var xhr=new XMLHttpRequest()

XMLHttpRequest 对象用于和服务器交换数据,如需将请求发送到服务器,我们使用 XMLHttpRequest 对象的 open() 和 send() 方法

xmlhttp.open("GET","ajax_info.txt",true);
xmlhttp.send();

onreadystatechange 事件

当请求被发送到服务器时,我们需要执行一些基于响应的任务。
每当 readyState 改变时,就会触发 onreadystatechange 事件。
readyState 属性存有 XMLHttpRequest 的状态信息。
下面是 XMLHttpRequest 对象的三个重要的属性:

手写请求demo

<button>获取资源</button>
  <img class="imgs">

  <script>
    const button = document.querySelector('button')
    const img = document.querySelector('img')

    function ajaxPromise() {
      let promise = new Promise((resolve, reject) => {
        let xhr = new XMLHttpRequest()
        xhr.open('get', './xhr.jpg', true)
        xhr.onreadystatechange = () => {
          if (xhr.readyState === 4) {
            if (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {
              resolve(xhr.responseURL)
            } else {
              reject(new Error(xhr.statusText))
            }
          }
        }
        xhr.send(null)
      })
      return promise
    }

    button.addEventListener('click', () => {
      ajaxPromise().then(res => {
        img.src = res
      }).catch(stat => {
        console.log(stat);
      })
    })
  </script>

以上是关于xhr的网络请求手写简单ajax的主要内容,如果未能解决你的问题,请参考以下文章

xhr的网络请求手写简单ajax

前端面试题之手写promise

手写一个简易的ajax请求

ajax请求本地md以及简单封装xhr ajax请求

Ajax

小白学AJAX-01-介绍