AJAX,一直都觉得这个名字很奇怪,全称是 Asynchronous JavaScript And XML,直译过来就是异步的 JavaScript 和 XML,它的作用是使用 XMLHttpRequest 与服务端通信,虽然说的是 XML,但是它支持 JSON、XML、HTML、TEXT等文本格式发送和接收服务端的数据,它最大的特点就在于其“异步”性,也就是说你可以在不刷新网页的情况下与服务器进行通信、交换数据、更新页面内容,总之,你可以使用 AJAX 做这两件事:
1.在不重新加载页面的情况下发送请求给服务器。
2.接受服务器并使用传回的内容。
使用 AJAX 的常用步骤:
var request = new XMLHttpRequest()
request.open('GET', '/a/b/c?name=ff', true);
request.onreadystatechange = function () {
if(request.readyState === 4 && request.status === 200) {
console.log(request.responseText);
}};
request.send();
步骤说明:
步骤一: var request = new XMLHttpRequest()
初始化一个 XMLHttpRequest 实例对象,这是使用 XMLHttpRequest 任何方法的前提。
**步骤二: **request.open('GET', '/a/b/c?name=ff')
初始化一个请求,open 方法可接受五个参数,第一个参数必选,表示要使用的 HTTP 方法,值可为 GET、POST、PUT、DELETE;第二个参数必选,表示发送请求的 url 地址;第三个参数可选,是一个布尔值,默认为true,表示是否要异步发送,一般设置为 true;第四个参数可选,表示用户名,可用于相关用户认证,默认为null;第五个参数可选,表示密码,也用于用户认证,默认为null。
步骤三:
request.onreadystatechange = function () {
if(request.readyState === 4 && request.status === 200) {
console.log(request.responseText);
}};
使用 onreadystatechange 事件监听 readyState 属性的变化,当该值变化时就调用相应的函数,相关的属性说明如下:
- request.readyState:是一个可读属性,返回一个 XMLHttpRequest 代理当前所处的状态,返回值及表示的意思如下:
| 值 | 状态描述 |
|---|---|
| 0 | 代理刚被创建,但是还未调用 open 方法 |
| 1 | 调用了 open 方法 |
| 2 | 调用了 send 方法,可以获得响应的头部和状态信息 |
| 3 | 下载中,responseText 属性已包含部分数据 |
| 4 | 下载操作已完成 |
- request.status:是一个可读属性,返回响应的数字状态码,在请求完成之前值为0,特别注意的是在 XMLHttpRequest 出错的时候也会返回0,其他常用的状态码表示的状态如下:
一般来说,共分为五类响应00-199表示信息响应,200-299表示成功响应,300-399表示重定向响应,400-499表示客户端错误,500-599表示服务器错误。
200:表示响应成功。
102:表示服务器已收到并正在处理该请求,但没有响应可用。
201:该请求已成功,并因此创建了一个新的资源。通常是在POST请求,或是某些PUT请求之后返回的响应。
300:被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息,用户或浏览器能够自行选择一个首选的地址进行重定向。
303:对应当前请求的响应可以在另一个URL上被找到,而且客户端应该采用GET的方式访问那个资源,这个方法的存在主要是为了允许由脚本激活的POST请求输出重定向到一个新的资源。
400:语义有误或者请求参数有误,当前请求无法被服务器理解,除非进行修改,否则客户端不应该重复提交这个请求。
404:请求页面不存在。
500:服务器遇到了不知道如何处理的情况。
其他内容见 维基百科。
- request.responseText:返回的是请求后从服务端返回的文本。请求失败时返回 null ,请求未被 send 时返回 "",请求还没有完成时可返回当前从后端返回的数据,数据还并不完整,当请求的 readyState 值为 4 同时 status 值为 200 时可返回完整的数据。
步骤四: request.send()
发送 http 请求,接收一个可选参数,可设置请求体,当使用的是 "GET" 或者 "HEAD" 时,应设置为 null。如果是异步请求,该方法会在请求完成后立即返回,如果是同步请求则会在响应到达后返回。