需求分析
同步处理需要等待数据取出来之后才会执行,这样大大的降低了程序运行的效率,有时候后端返回来的不是一个完整的页面,而是某种格式的数据,例如xml、json、文本等等,这个时候我们就会引出同步和异步的概念了。
- 同步:简单的来说就是整个页面白屏然后刷新
- 异步:只是局部刷新,比如评论点击加载更多
浏览器Ajax请求服务器
ajax请求机制如图:
选择异步请求的方式,常用的有三种,如$.ajax()、$.post()、$.get()。
其中$.ajax允许get/post两种请求方式,$.get()只允许get请求,$.post()只允许post请求方式。
SRC
新建一个html,代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<div>
<div id="showInfo"></div>
<form id="form">
用户名:<input type="text" name="username" id="username">
</br>
密码:<input type="password" name="password" id="password">
<input type="button" id="btn" value="登录">
</form>
</div>
<script>
window.onload = function (argument) {
// 定义一个btn事件,点击时就会触发
var btn = document.getElementById('btn');
btn.onclick = function(){
// 取到输入框中输入的username和password的值
var username = document.getElementById('username').value;
var password = document.getElementById('password').value;
// 定义XMLHTTPRequest
var xhr = null;
//在这里我们需要判断一下,因为IE始终是个个例
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
}else{
xhr = new ActiveXObjext("Microsoft.XMLHTTP");
}
// 准备好XMLHTTPRequest,开始进行异步处理
var url = './check.php?username='+username+"&password="+password;
xhr.open('get' ,url ,true);
// onreadystatechange回调函数等待执行,就是xhr通知完服务器,服务器返回数据之后才知道做什么事情,在xhr.send()之后执行
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
var data = xhr.responseText;
if(data == 1){
document.getElementById('showInfo').innerHTML='用户名或密码错误';
}else if(data == 2){
document.getElementById('showInfo').innerHTML='登陆成功!';
}
}
}
}
// xhr实际去做的事情
xhr.send(null);
}
}
</script>
</body>
</html>
前台向服务器发送数据请求,后台来进行判断返回什么值
<?php
$username = $_GET['username'];
$password = $_GET['password'];
if ($username == 'admin' && $password == '123') {
echo 2;
}else {
echo 1;
}
?>
在这里,我定义了username为admin并且password为123时返回2
调试
接下来打画面测试一下,先输入正确的用户名密码
可以看到触发了一个事件,而页面没有刷新
点开这个事件就能看到服务器Response返回的是2,也就是我在后台进行的判断,如果用户名密码正确则返回2,前台接受这个数据,页面上就产生了变化,提示登陆成功!

然后输入错误的用户名密码

触发的事件中也写明了用户名和密码是什么
点开事件,此时服务器返回的是1,页面上提示用户名或密码错误
