玩转原生态AJAX


一、什么是局部刷新和全局刷新

1.全局刷新

浏览器整个页面刷新(整个页面被新的数据覆盖)

在这里插入图片描述

2.局部刷新

不刷新整个页面,只刷新页面的一部分。

在这里插入图片描述

二、什么是AJAX?

  AJAX 即 Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。  
  AJAX 实现局部刷新的一种技术。AJAX 是一种用于创建快速动态网页的技术。

Ajax的原理简单来说:通过浏览器的javascript对象XMLHttpRequest(Ajax引擎)对象向服务器发送异步请求并接收服务器的响应数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。即用户的请求间接通过Ajax引擎发出而不是通过浏览器直接发出,同时Ajax引擎也接收服务器返回响应的数据,所以不会导致浏览器上的页面全部刷新。

1. 同步和异步的区别

同步方式发送请求:发送一个请求,需要等待响应返回,然后才能够发送下一个请求,如果该请求没有响应,不能发送下一个请求,客户端会一直处于等待过程中。
异步方式发送请求:发送一个请求,不需要等待响应返回,随时可以再发送下一个请求,即不需要等待。

2.原生态的Ajax的开发步骤

  1. 创建Ajax引擎对象(XMLHttpRequest对象)
  2. 为对象绑定事件(设置回调函数,处理服务器返回来的数据)
  3. 设置请求路径和请求参数
  4. 发送请求
  5. 接受服务器响应的数据

3.核心对象XMLRequest

在这里插入图片描述

①readyState属性(Ajax引擎通信状态码)
  • 0:请求未初始化,创建异步请求对象 var xmlHttp = new XMLHttpRequest()
  • 1: 初始化异步请求对象, xmlHttp.open(请求方式,请求地址,true)
  • 2: 异步对象发送请求, xmlHttp.send()
  • 3: 异步对象接收应答数据 从服务端返回数据。XMLHttpRequest 内部处理。
  • 4: 异步请求对象已经将数据解析完毕。 此时才可以读取数据。

每当 readyState 属性改变时,就会调用回调函数(一共会调用4次)

②status属性(http通信状态码)
  • 200:ok
  • 404:未找到页面
③初始化请求参数(open方法)
    Ajax对象.open(method,url,async)
  • method:请求的类型;GET 或 POST
  • url:服务器的 servlet 地址
  • async:true(异步)或 false(同步)
④接收服务器响应回来的数据
 XMLHttpRequest对象.responseText ;   获得字符串形式的响应数据
 XMLHttpRequest对象.responseXML ;    获得 XML 形式的响应数据

三、Ajax实现通过省份id查询省份的名称

在这里插入图片描述

前端页面(通过Ajax发起请求)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>数据表</title>
      <script>
          function doBtn() {
              var pid = document.getElementById("id").value;
              var xmlHttpRequest = new XMLHttpRequest();
              //创建异步duixiang
              //绑定事件
              xmlHttpRequest.onreadystatechange=function () {
                  if(xmlHttpRequest.readyState==4&&xmlHttpRequest.status==200){
                   var respText =  xmlHttpRequest.responseText;
                   // 将json对象转换为java对象
                   var jsonObj=eval("("+respText+")");
                   document.getElementById("name").value=jsonObj.name;
                   document.getElementById("jiancheng").value=jsonObj.jiancheng;
                   document.getElementById("shenghui").value=jsonObj.shenghui;
                  }
              }
              <!-- 初始化参数-->

              xmlHttpRequest.open("get","ajaxServlet?id="+pid,true);
              //发送请求
              xmlHttpRequest.send();
          }
      </script>
  </head>
  <body>
   <table border="1px" align="center">
      <tr>
        <td>省份id</td>
        <td><input type="text" id="id"/>
        <input type="button"  value="搜索" onclick="doBtn()"/></td>
      </tr>
      <tr>
        <td>省名</td>
        <td><input type="text" id="name"></td>
      </tr>
     <tr>
       <td>省份简称</td>
       <td><input type="text" id="jiancheng"/> </td>
     </tr>
     <tr>
       <td>省会</td>
       <td><input type="text" id="shenghui"/> </td>
     </tr>
   </table>
  </body>
</html>

服务端Servlet实现类

public class AjaxServlet extends HttpServlet {
     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
         String id = request.getParameter("id");
         ProvinceDao provinceDao = new ProvinceDao();
         Province province = provinceDao.find(id);
         //将java对象转换为json格式的字符串
         ObjectMapper objectMapper = new ObjectMapper();
         String string = objectMapper.writeValueAsString(province);
         response.setContentType("application/json;charset=utf-8");
         PrintWriter writer = response.getWriter();
         writer.println(string);
         writer.flush();
         writer.close();
     }
}

dao层,查询数据

public class ProvinceDao {


    public Province find(String id) {
        Connection connection=null;
        PreparedStatement statement=null;
        Province province=null;
        try {
             connection = JdbcUtil.getConnection();
            String sql="select name,jiancheng,shenghui from province  where id=?";
            statement = connection.prepareStatement(sql);
            statement.setString(1,id);
            ResultSet resultSet = statement.executeQuery();
            while (resultSet.next()){
                String name = resultSet.getString("name");
                String jiancheng = resultSet.getString("jiancheng");
                String shenghui = resultSet.getString("shenghui");
                province = new Province(null, name, jiancheng, shenghui);
            }

        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                statement.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return province;
    }
}

实体类以及jdbc工具类就不展示了

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贫僧洗发爱飘柔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值