响应数据的状态码:0,1,2,3,4
0:已创建了Ajax对象,但是没有对Ajax对象进行配置
1:已对Ajax对象进行配置,但是没有发送请求
2:已经发送请求,单没有接收到响应的数据
3:已接收到服务器端的响应数据,但是没有接收完毕
4:服务器端的响应数据接收完毕
可以根据状态码来判断当前请求进行到哪一步了,当状态码为4时,表示可以对响应数据进行操作
客户端 06ajax.html 代码:
<body>
<script>
// 创建ajax对象
var aj = new XMLHttpRequest();
// 配置ajax对象,如果是传递json类型的数据,请求类型必须得是post
console.log(aj.readyState); //0
aj.open('get', 'http://localhost:3000/readstate');
console.log(aj.readyState); //1
aj.onreadystatechange = function() {
console.log(aj.readyState);// 2 3 4
if (aj.readyState == 4) {
console.log(aj.responseText);
}
}
aj.send();
</script>
</body>
服务器端 app.js 代码:
const express = require('express');
const path=require('path');
const app = express();
//指明静态文件目录位置,以便浏览器中对(客户端)静态文件的加载
app.use(express.static(path.join(__dirname, 'public')));
app.get('/readstate', (req, res) => {
res.send('已经对请求做出响应了');
})
app.listen(3000);
console.log('3000已启动');
可以看出, 状态码每一次的改变都会触发Ajax对象的onreadystatechange事件
而且当状态码为4时才会输出相应数据
(方法1)可以在每次改变后来判断是否为4继而得知是否已对服务器端的相应数据接收完毕
(方法2)使用Ajax对象的onload事件(当服务器端数据接收完毕后被触发)
总结:
onreadystatechange和onload都可以实现获取服务器端的响应,两者的区别:
1、onreadystatechange()会被调用多次,每次状态的改变都会被调用,效率低
onload()只会被调用一次,无需判断状态码,代码简洁,效率搞
2、onreadystatechange()可以兼容低版本的浏览器
onload()不兼容IE低版本浏览器