JavaScript学习笔记(十八)

boyanx1个月前技术教程17

前面我们学习了定时器,知道了定时器实际上是一种异步任务,还提到过JS中常见的另外几种异步任务,其中有一种异步任务叫AJAX,那么这篇文章我们就一起来学习一下AJAX。

在学习AJAX之前,为了演示的方便,我们会用nodejs自己建立一个后端的接口,所以大家需要提前在自己的电脑上安装好nodejs环境,大家可以去Node.js官网下载并安装nodejs,这里就不给大家演示了,基本都是一键安装,顺带提一句,nodejs是做JS开发必备的开发环境。

首先我们先用nodejs创建一个简单的服务接口

1,我们先创建一个serve.js文件(注意是以.js作为文件的后缀,不是.html)

2,在serve.js文件中编写以下代码

这一部分就是Nodejs提供的创建接口服务,这部分代码大家直接照抄就可以,需要注意的是res.setHeader这一步千万不能省,这一步省了会出现跨域的问题。

3,在vscode中右键单击 资源管理器 空白的部分,点击 在集成终端中打开

或者直接按ctrl+`(1旁边的键)

4,打开集成终端,也就是俗称的命令行,并在命令行中输入 node serve.js

5,输入回车后我们的接口服务就启动了

6,按ctrl+鼠标左键,我们直接打开http://127.0.0.1:8888链接

服务创建成功!

我们创建完后端接口后,可以开始编写ajax代码了

1、ajax代码我们还是写在html文件的script标签中,首先我们要用到浏览器的内置XMLHttpRequest类,我们先创建一个XMLHttpRequest实例

2、创建完实例后,xhr实例会有一个readyState属性,该属性有0-4一共5个值,在未调用任何xhr实例方法之前,该属性的值为0,表示unsent

3、之后我们就可以调用xhr实例的实例方法了,我们先调用open方法,该方法接受3个参数,第一个参数是字符串,传入请求方法,目前常用的请求方法有get、post等,这里我们传入get,第二个参数是字符串,传入请求url地址,这里我们把刚刚创建好的服务的地址传入即可,第三个参数是Boolean,表示该ajax请求是否异步,默认为true表示异步,该参数正常情况下就使用默认值即可,否则ajax请求多了,同步请求会一个一个等待服务的响应,非常影响页面的性能。

调用完open方法后,就表示我们已经和该地址开始建立http链接,而此时readyState的值会发变成1,表示http链接已经建立

4、调用完open方法后,我们就可以通过send方法对接口端发送请求内容了,send方法接收一个参数,参数为http请求的请求体,这里我们直接传null即可,ajax会传默认的请求体给接口端。send方法必须要有,相当于是一个确认键,只有调用send方法,浏览器才会向接口发起请求。

5、接下来就是调用整个ajax最关键的onreadystatechange方法了,该方法表示对接口返回结果的处理

首先,我们要对当前xhr的readyState属性进行一个筛选,readyState属性一共有5个状态,分别是:

0:初始化,XMLHttpRequest对象还没有完成初始化

1:载入,XMLHttpRequest对象开始发送请求

2:载入完成,XMLHttpRequest对象的请求发送完成

3:解析,XMLHttpRequest对象开始读取服务器的响应

4:完成,XMLHttpRequest对象读取服务器响应结束

只有在readyState=4的时候,我们才能完整拿到接口传过来的数据,因此我们首先要判断readyState的值是否为4

6、当然,readyState只能表示能读取接口结束,能不能拿到数据还得看接口是否能正常返回数据,而接口返回数据同样有一个状态码status,status分为5大类,分别是:

1xx:信息响应类,表示接收到请求并且继续处理

2xx:处理成功响应类,表示动作被成功接收、理解和接受

3xx:重定向响应类,为了完成指定的动作,必须接受进一步处理

4xx:客户端错误,客户请求包含语法错误或者是不能正确执行

5xx:服务端错误,服务器不能正确执行一个正确的请求

只有当状态码为2xx的时候,接口端才能正常返回数据,所以,我们还要加上status的判断,使其在2xx状态下

当然,为了方便我们处理不同的readyState,我们可以这样写

7、只有在图中的双重条件语句里面才能正常获得接口返回的数据,这时我们调用responseText即可获取接口响应的数据

上面就是JS原生的ajax请求的基本步骤,当然现在原生ajax用的比较少了,现在常用的ajax请求库有jquery、axios、fetch等等,我们在调用接口的时候直接使用库会方便很多,但是我们一定要理解ajax的实现过程,因为这些库都是基于原生ajax进行的进一步封装,例如jquery就是利用ajax,采用了回调函数的方式进行封装,而axios则是采用了Promise等等,无论是什么ajax库,底层的实现原理一定是原生的ajax!

标签: jq 定时器

相关文章

基于Vert.x的实时Web监控系统

摘 要: 创新性地使用最新的Vert.x框架,利用其异步、非阻塞、实时性、高并发的工作模式,对现有的工业过程监控系统进行全面改造,极大提升了系统的响应速度,实时性得到显著提高,完全满足大量客户端并发的...

深入JavaScript教你内存泄漏如何防范

作者:大道至简转发链接:https://mp.weixin.qq.com/s/0w6aWwpR3MAJnmyLwDnAzA前言一般情况下,忽视内存管理不会对传统的网页产生显著的后果。这是因为,用户刷新...

怎么学习前端开发?

昨天晚上刷知乎,有个问题邀请我回答,本来我是不喜欢回答的,就喜欢瞎逛,但是一个看问题是:“怎么学习前端开发?求推荐学习路线?”,点进去一看:这问题正好是咱专业,在行啊,必须给广大人民群众解解惑,就先留...

停止javascript的ajax请求,取消axios请求,取消reactfetch请求

一、Ajax原生里可以通过XMLHttpRequest对象上的abort方法来中断ajax。注意abort方法不能阻止向服务器发送请求,只能停止当前ajax请求。停止javascript的ajax请求...

前端人必看!这 10 个 JavaScript 技巧,让你代码效率狂飙 99%!

前端开发的 “江湖” 里,JavaScript 就是咱们闯荡的 “绝世武功”。可不少兄弟天天对着代码抓耳挠腮,写得又慢又容易出 Bug,加班都成了家常便饭!别愁!今天带来的这 10 个 JavaScr...

树莓派基础安装

一、设置llvim ~/.bashrcPROMPT_COMMAND='printf "\033]0;%s@%s:%s\007" "${USER}" "$...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。