一、什么是Ajax?
1;Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)
2:AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下
(1):ajax的应用场景
ajax是一种与后端数据交互,实现页面无刷新的技术
1:股票等
2:地图等
3:获取详情页等
4:百度搜索关键字
5:翻页(上拉加载更多)
二、Ajax的使用
1:创建xml对象 —用于于后端数据交互
let xml = new XMLHttpRequest();
2:发送请求 —这边包含两个方法,首先先用open方法:设置你要发送请求的方法,请求数据的url,第三就是是否异步
open(method,url,async) 参数一:方式(get或者post);参数二:请求文件在服务器上url; 参数三:是否异步
然后用send() 方法 —将请求发送到服务器
3:针对发送的请求方式不同,添加不同的条件
01:get请求的话,假如为了避免发生请求出现缓存的情况,需要在url后面添加一个时间戳
02:get请求需要携带参数的时候,也是在url后面拼接参数,因此数据data在外面先定义后,直接拼接在?后面
let data = “time=” + new Date() + “name=” + “lala” + “;age=” + 18; //一般而言name= ?是变量,从表单获取过来的
xml.open(“get”, “text1.txt?” + data, true);
xml.send();
03:假如为post请求的时候,那么你就需要设置发送请求头,还有数据需要在send方法里面发送
let data = “name=” + “lala” + “&age=” + 18; //一般而言name= ?是变量,从表单获取过来的
xml.open(“get”, “text1.txt?time=” + new Date(), true);
xmlhttp.setRequestHeader(“Content-type”,“application/x-www-form-urlencoded”);
xml.send(data);
4:服务器的响应:向服务器发送请求后,首先服务器做出响应任务,然后回馈我们消息,这些消息来自XMLHttpRequest对象里面的属性( responseText属性)—这个属性里面存放着字符串格式的响应数据(一般为0或1)。
01:响应任务处理:每当 ==readyState ==改变时,就会触发 ==onreadystatechange(存储函数) ==事件:
02:readyState 属性存有 XMLHttpRequest 的状态信息
解析:readyState(状态值):—用来标识当前XMLHttpRequest对象处于什么状态 (里面有着5种状态: 0: 请求未初始化。 1: 服务器连接已建立。 2: 请求已接收。 3: 请求处理中。 4: 请求已完成,且响应已就绪)
status(状态码): —响应的HTTP状态码 ( 200: “OK” 404: 未找到页面)
//3:服务器的响应
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) { //证明请求完成
if (xhr.status === 200) { //证明响应成功
var str = xhr.responseText; //响应后的数据,存放在xhr对象的responseText属性里面,是字符串格式
if (str === "1") {
//为真
} else {
//为假
}
}
}
}
(1):一个简单的get请求
需求:当表单失去焦点的时候,发送get请求,并且传递用户名过去
<form action="4login.html">
<label for="uname">用户名:</label><input type="text" id="uname" name="uname">
</form>
<script>
// 需求 给表单发送一个普通的get请求(失去焦点的时候),并且传递用户名
let uname = document.querySelector("#uname");
uname.addEventListener("blur", function () {
let txtVal = uname.value;
//1:创建xhr对象实例
let xhr = new XMLHttpRequest();
let data = "time=" + new Date() + "&name=" + txtVal;
//2:发送请求
xhr.open("get", "text1.txt?" + data, true);
xhr.send(null);
//3:服务器的响应
xhr.onreadystatechange = () => { //01:先触发xhr对象实例的存储函数
if (xhr.readyState === 4) { //02:判断xhr对象实例中状态值是否为4(4的话,证明请求已经完成)
if (xhr.status === 200) { //03:判断xhr对象实例中http状态码是否为200(200的haul,证明交易成功)
let str = xhr.responseText; //04:服务器返回的数据以字符串的形式存储在responseText属性里面
if (str === "1") {
//成功
} else {
//失败
}
}
}
}
})
</script>
(2):一个简单的post请求
需求:针对一个密码框失去焦点的时候,发送post请求
<form action="">
<label for="pwd">密码</label><input type="password" id="pwd">
</form>
<script>
//立即执行函数,一点击失去焦点,直接验证,不用堆积太多
(function () {
let pwd = document.querySelector("#pwd");
pwd.addEventListener("blur", function () {
let pwdVal = pwd.value;
//1:创建xhr对象实例
let xhr = new XMLHttpRequest();
//2:发送post请求
let data = "pwd=" + pwdVal;
xhr.open("post", "text1.txt?time=" + new Date(), true);
xhr.send(data);
//3:服务器的响应
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
let str = xhr.responseText;
if (str === "1") {
//成功
} else {
//失败
}
}
}
}
})
})()
</script>