开发者学堂课程【Ajax 前端开发入门与实战:同步请求和异步请求】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/595/detail/8528
同步请求和异步请求
1、将Ajax请求改为同步请求。
xhr.open(get’,’./server/checkUsername.php?username='+uname,false)
这样做的话,会有两个问题。
第一:界面会卡顿,卡顿多长时间,取决于网络速度。
第二:xhr.onreadystatechange 的回调将不会被执行,需要修改代码后才能获取到数据,将回调去除即可。
username.onblur = function(){
var usernameValue = username.value;
//将 usernameValue 提交给服务器,有服务器进行唯一性的校验
//1.创建对象,兼容处理
var xhr = null;
if(window.XMLHttpRequest)
xhr = new XMLHttpRequest();
}else {
xhr = new ActiveXObject(“Microsoft.XMLHTTP");
}
//2.准备发送
xhr.open("get",”./server/checkUsername.php?uname= +
usernameValue,false);
//false,用户是操作不了界面的,这是同步与异步的区别
//3.执行发送
xhr.send(null);
//制定回调函数
//xhr.onreadystatechange = function(){
if(xhr.readyState ==4)(
if(xhr.status == 200)
var result = xhr.responseText;
varusername_result =document.querySelector(“#username_result");
if(result == "ok"){
username_result.innerText = "用户可以使用";
}else{
username_result.innerText = "用户已经被注册";
}
}
}
}
同步请求网页模拟网速慢的情况下
<
?php
//用户名输入后网络延迟5秒的时间后再输入
sleep(5
);
$username = $_GET["uname"];
if($username
==
’zhangsan’
){
echo "error";
}
else
{
e
cho
"ok"
;
}
?>
补充知识:
网页展示:
输入用户名,等待5s后才可操作下一步,此时是同步的请求,这是 true 和 false 之间的区别,true 是同步,false 是异步。