AJAX实现异步处理

需求分析

同步处理需要等待数据取出来之后才会执行,这样大大的降低了程序运行的效率,有时候后端返回来的不是一个完整的页面,而是某种格式的数据,例如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,页面上提示用户名或密码错误

客官,打赏一下嘛~~