1.异步请求对象

在局部刷新,需要创建一个对象,代替浏览器发起请求的行为,这个对象存在内存中。代替浏览器发起请求并接收响应数据。这个对象叫做异步请求对象
全局刷新是同步行为, 局部刷新是异步行为[浏览器数据没有全部更新] 这个异步对象用于在后台与服务器交换数据。
XMLHttpRequest 就是我们说的异步对象
XMLHttpRequest 对象能够:

  • 在不重新加载页面的情况下更新网页
  • 在页面已加载后向服务器请求数据
  • 在页面已加载后从服务器接收数据
    所有现代浏览器 (IE7+、Firefox、Chrome、Safari 以及 Opera) 都内建了 XMLHttpRequest 对象。通过一行简单的 JavaScript 代码,我们就可以创建 XMLHttpRequest 对象
    创建 XMLHttpRequest 对象的语法(xhr)
    var xmlhttp=new XMLHttpRequest();
    AJAX 中的核心对象就是 XMLHttpRequest

2.XMLHttpRequest对象解析

XMLHttpRequest 对象 open( method , url, true ) 第三个参数 true 表示异步请求
异步请求特点:

  • 1)某一个时刻,浏览器可以委托多个异步请求对象发送请求,无需等待请求处理完成。
  • 2)浏览器委托异步请求对象工作期间,浏览器处于活跃状态。可以继续向下执行其他命令。
  • 3)当响应就绪后再对响应结果进行处理

实现步骤:

  • 1.设置异步对象 open 方法第三个参数为 true
    // 初始请求参数 xmlHttp.open(“get”,“searchProvinceJson?proid=”+proid,true);
  • 2.send()后面,增加 alert()
    // 发送请求 xmlHttp.send(); alert(“我是最后一行的代码”)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

    <script type="text/javascript">
        // 在这里使用javaScript语言发起Ajax请求,访问服务器AjaxServlet中javaScriptAjax
        function ajaxRequest() {
            // 1、我们首先要创建XMLHttpRequest
            var xmlHttpRequest = new XMLHttpRequest();

            // 2、调用open方法设置请求参数
            // method:请求的类型;GET 或 POST
            // url:文件在服务器上的位置
            // async:true(异步或 false(同步
            xmlHttpRequest.open("GET","http://localhost:8080/16_AJAX/ajaxServlet?action=javaScriptAjax",true);

            // 4、在send方法前绑定onreadystatechange事件,处理请求完成后的操作。
            // onreadystatechange 事件
            // 当请求被发送到服务器时,我们需要执行一些基于响应的任务。
            // 每当 readyState 改变时,就会触发 onreadystatechange 事件。

            xmlHttpRequest.onreadystatechange = function () {
                if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
                    // alert("收到服务器返回的数据:" + xmlHttpRequest.responseText);
                    //JSON.parse() 把 json 字符串转换成为 json 对象
                    var jsonObj = JSON.parse(xmlHttpRequest.responseText);
                    // 把响应的数据显示在页面上
                    document.getElementById("div01").innerHTML = "编号:" + jsonObj.id + ",姓名:" + jsonObj.name;
                }
            }
            // 3、调用send方法发送请求
            xmlHttpRequest.send();

            alert("我是最后一行的代码");

        }
    </script>
</head>
<body>
    <button onclick="ajaxRequest()">ajax request</button>
    <div id="div01">
    </div>
</body>
</html>
  • 3.SearchServletJson 类的 doGet 方法第一个加入断点
  • 4.部署应用,在浏览器访问应用。
    点击“ajax request”按钮,请求发送到 Servlet,程序暂停执行, js 中 alert 执行继续执行,没有等待请求处理完成,浏览器窗口弹窗“我是最后一行的代码”字符串

3.同步请求

XMLHttpRequest 对象 open( method , url, false ) 第三个参数 false 表示同步请求
同步请求特点

  • 某一个时刻,浏览器只能委托一个异步请求对象发送请求,必须等待请求处理完成。
  • 浏览器委托异步请求对象工作期间,浏览器处于等待状态。不能执行其他命令。
  • 不推荐使用。

实现步骤:同 之前步骤,需要 open(method,url,false)第三个参数设为 false。且部署应用后,程序暂停执行, js 中 alert 不会执行,处于等待状态