JavaScript Ajax 教程
Ajax 全称 Asynchronous JavaScript and XML( 异步 JavaScript 和 XML ),早在 2005 年就被提出,它被描述为一种使用现有技术集合的‘新’方法,包括的技术有:HTML、CSS、JavaScript、DOM、XML 以及最重要的 XMLHttpRequest,它可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容
Ajax 的核心是异步数据交换,通过 Ajax 我们可以向服务器发送 HTTP 请求( 如 GET、POST 等 ),并处理响应( 包括 JSON、XML、HTML等 )
XMLHttpRequest
对象
XMLHttpRequest 对象是对 Ajax 异步数据交换的实现
基本用法:
1 | // 创建 XMLHttpRequest 类型对象 |
XMLHttpRequest 的常用方法:
xhr.open(method, url)
:method
:请求方法(如GET
或POST
)url
:请求的目标 URL
xhr.send(data)
:发送请求,如果是GET
请求,data
通常为null
;如果是POST
请求,可以在这里发送请求体数据xhr.setRequestHeader(header, value)
:设置 HTTP 请求头,例如设置Content-Type
为application/json
xhr.getResponseHeader(name)
:获取 HTTP 响应头xhr.abort()
:取消当前的请求xhr.responseType
:响应体的类型,默认 text 类型arraybuffer
:response 是一个包含二进制数据的 js ArrayBufferblob
:response 是一个包含二进制数据的 Blob 对象document
:response 是一个 Document 对象( 如:HTML Document、XMLDocument )json
:response 是一个 js 对象text
:response 是一个普通文本( 字符串 )
xhr.response
:获取响应体xhr.responseText
:获取响应体,只有当responseType
为text
或""
时,xhr
对象上才有此属性xhr.responseXML
:获取响应体只,有当responseType
为text
、""
、document
时,xhr
对象上才有此属性
readystatechange 事件:
readystatechange
事件在 readyState
属性每次变化时 都会触发,因此它可以处理整个请求的生命周期
readyState
具有 5 种状态:
0
: 请求尚未初始化,open()
方法还未被调用1
: 服务器连接已建立,此时可以可以开始发送请求了2
: 请求已接收,响应头和响应状态已经返回3
: 请求处理中(正在接收响应数据),此时xhr.response
中可能已经有了响应数据4
: 请求已完成,传输结束
load 事件:
load
事件在 请求完成且成功接收到服务器响应后 触发。换句话说,当请求的 readyState
达到 4
(完成)并且状态码为 200
代表成功时,onload
会被调用
发送 POST 请求
例1:
1 | /* 例1 发送 form-urlencoded 类型数据 */ |
超时处理
可以通过 timeout
事件来处理请求超时,当请求在设定的时间内未能完成,触发 timeout
事件
例:
1 | const xhr = new XMLHttpRequest(); |
error
事件:
error
事件会在请求失败时被调用。它处理的是与请求本身相关的网络问题,比如服务器未响应、断网等
发送文件
例:
1 | <form id="uploadForm"> |
1 | function uploadFile() { |
进度监听
XMLHttpRequest
支持追踪上传和下载的进度,可以通过 progress
事件来监听进度
例:
1 | let xhr = new XMLHttpRequest(); |
xhr.upload.onprogress
事件会在上传阶段( 即xhr.send()
之后,xhr.readystate=2
之前 )触发,每50ms触发一次;xhr.onprogress
事件会在下载阶段( 即xhr.readystate=3
时 )触发,每50ms
触发一次
XMLHttpRequest 其它事件
onloadstart
:获取开始,调用xhr.send()
方法后立即触发,若xhr.send()
未被调用则不会触发此事件onabort
:获取操作终止,当调用xhr.abort()
后触发onloadend
:获取完成,当请求结束(包括请求成功和请求失败)时触发
Axios
Axios 是一个基于 Promise 的 HTTP 网络请求库,可在 Node.js 和 浏览器环境中使用,在浏览器环境中则是基于 XMLHttpRequest
对象实现
使用 Axios
首先,我们要引入 Axios。可以通过 CDN 链接引入,或者使用 npm 安装:
通过 <script src="CDN_LINK"></script>
引入:
1 | <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script> |
通过 npm 安装:
1 | npm install axios |
基本用法
发送 GET 请求:
1 | /* |
发送 POST 请求:
1 | /* |