怎么实现系列:7.怎么用原生js实现一个ajax请求

211 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

系列介绍

经常会被面试官问到这个功能或者效果怎么实现,或者怎么实现xx功能/效果?

有些功能或者效果以前没有做过或者实现过,导致自己回答不出来,场面一度变得有些尴尬。

于是自己打算出一个怎么实现系列,来实现xx功能或者xx效果,以此来提升自己的实战效果和能力。

本系列是一个开放系列,可能自己能力有限,故我实现的效果或者代码不一定是最好的,欢迎大家参与交流讨论。

场景

面试官:有在项目里发送过请求吗?

我:有的

面试官:那你是怎么发送请求的?

我:引入axios库,用axios来发送请求

面试官:用axios来发送请求,那你有了解过怎么实现一个ajax请求吗?

(思考了一会)

我:我记得好像是利用xmlHttpRequest来做的

面试官:...

查阅资料

Ajax即“Asynchronous Javascript And XML”,是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

发送ajax请求,主要是利用xmlHttpRequest实例对象来完成。

接下来,我们看下怎么用xmlHttpRequest实例对象来发送ajax请求

实现

先创建一个index.html文件,在body里面添加一个script标签

1.创建一个xmlHttpRequest实例对象
let xhr = new XMLHttpRequest()
2.调用xmlHttpRequest实例对象的open方法

xhr.open('get','http://localhost:3000')

调用xmlHttpRequest实例对象的open方法, 传递两个参数

  • 参数一:调用请求的方法,为get或者post
  • 参数二:请求的url

这一步,主要是定义你发送请求的方法,是get还是post。同时指明你发送请求的地址。

3.设置ajax请求的回调函数

 xhr.onreadystatechange = function(){
            if(xhr.readyState ==4) {
                if(xhr.status ==200){
                    console.log('请求成功');
                }else{
                    console.log('请求失败');
                }
            }
        }

我们先了解一下ajax请求的几种状态。

xmlHttpRequest实例对象的readyState有4种状态:

  • 1:请求已发送,调用了open()方法
  • 2:请求发送完成状态,调用了send()方法
  • 3:开始请求服务器响应
  • 4:请求服务器响应结束

当xmlHttpRequest实例对象的readyState的值发生改变时,会触发readystatechange事件。所以我们可以监听readystatechange事件,当xmlHttpRequest实例对象的readyState状态值为4时,代表请求完成了,执行回调函数,在这里处理请求完成后,我们想要处理的逻辑。

4.调用xmlHttpRequest实例对象的send方法

xhr.send()

调用send方法,发送ajax请求。

如果发送的是post请求,那么post请求的参数,需要放在send方法里传递。在send方法里,传递一个对象即可。

完整代码


let xhr = new XMLHttpRequest()
        xhr.open('get','http://localhost:3000')
        xhr.onreadystatechange = function(){
            if(xhr.readyState ==4) {
                if(xhr.status ==200){
                    console.log('请求成功');
                }else{
                    console.log('请求失败');
                }
            }
        }
        xhr.send()

小结

我们如果用原生js发送一个ajax请求,主要有以下几个步骤:

  1. 创建一个xmlHttpRequest实例对象
  2. 调用xmlHttpRequest实例对象的open方法
  3. 监听readystatechange事件
  4. 调用xmlHttpRequest的send方法,发送请求

最后,放上自己比较喜欢的一句诗句:

千淘万漉虽辛苦,吹尽狂沙始到金 - 唐 刘禹锡《浪淘沙》