玩转原生态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
    评论
原生 JavaScript 中的 AJAX GET 是一种用于从服务器获取数据的技术。它允许我们使用 JavaScript 在不重载整个页面的情况下向服务器发送 HTTP 请求并获取数据。下面是一个使用原生 JavaScript 来实现 AJAX GET 请求的示例: ```javascript function ajaxGet(url, callback) { var xhr = new XMLHttpRequest(); // 创建 XMLHttpRequest 对象 xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr.status === 200) { var response = JSON.parse(xhr.responseText); // 解析服务器返回的 JSON 数据 callback(response); // 调用回调函数并传递响应数据 } }; xhr.open("GET", url, true); // 设置请求方法、URL 和异步标志 xhr.send(); // 发送请求 } // 使用示例 ajaxGet("https://api.example.com/data", function(response) { console.log(response); // 在控制台打印服务器返回的数据 }); ``` 在上述示例中,`ajaxGet` 函数接受一个 URL 和一个回调函数作为参数。它创建了一个 `XMLHttpRequest` 对象并设置了一个 `onreadystatechange` 事件处理程序,以便在请求的状态发生变化时进行处理。 当请求状态为 4(表示请求完成)且状态码为 200(表示请求成功)时,通过 `JSON.parse` 解析服务器返回的 JSON 数据。然后,调用传递给 `ajaxGet` 函数的回调函数,并将解析后的响应数据作为参数传递给它。 在使用示例中,我们调用 `ajaxGet` 函数,并在回调函数中打印服务器返回的数据。你可以根据自己的需求进一步处理这些数据,例如在页面上显示它们或进行其他操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

贫僧洗发爱飘柔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值