Ajax我真的理解了...

Ajax…

1.全局刷新和局部刷新

  • 全局刷新。整个浏览器被新数据覆盖,浏览器需加载,重新刷新渲染页面
  • 局部刷新。在浏览器的内部交互发起请求,改变页面部分数据

异步对象实现ajax局部刷新。

ajax局部刷新的核心对象是异步对象——XMLHttpRequest

XMLHttpRequest对象存在浏览器内存中,使用js语法创建和使用XMLHttpRequest对象:

var xmlhttp = new XMLHttpRequest();

XMLHttpRequest对象能够:

  1. 在不重新加载页面情况下更新网页
  2. 在页面已加载后向服务器请求、接收数据

2.ajax概念

2.1概念

全称Asynchoronous Javascript and XML,叫异步的Javascript和XML;

Asynchoronous 异步的意思

Javascript 脚本,在浏览器里面执行的

XML被用来传输和存储数据的,一种数据格式

异步相对于同步来说。同步是一件事一件事执行,只有前一个任务完成,才能执行后一个任务,异步可以setTimeout执行任务。

2.2是什么

ajax是一种局部刷新的新方法,不是一种语言,它是利用现有的技术完成局部刷新的技术。

ajax包含的技术有javascript,dom,css,xml,核心是javascript和xml

javascript 负责创建异步对象,发送请求,更新dom对象和数据。(ps:数据从服务器端获取)

xml 是网络传输的数据格式,现在使用json替代xml

2.3怎么用

问1:怎么使用ajax的XMLHttpRequest对象?/ ajax的异步实现步骤

步骤:1。2。3。4。

1。创建对象

var xmlHttp = new XMLHttpRequest();

2。给创建的对象绑定事件

onreadystatechange()事件,当异步对象被创建后,发起请求,获取数据时会触发这个事件,这个事件需指定一个函数,在函数里异步对象请求处理状态的变化;

xmlHttp.onreadystatechange = function(){
	//处理请求的状态变化
}

readyState属性存有XMLHttpRequest状态,从0-4发生变化

0:请求未初始化var xmlHttp = new XMLHttpRequest();

1:初始化异步请求对象,xmlHttp.open(请求方式,请求地址,true)

2:异步对象发送请求,xmlHttp.send()

3:异步对象接收应答数据,xmlHttpRequest内部处理

4:异步对象已将数据解析完毕,这时才能读取数据,更新页面的数据信息

status属性表示网络请求的状况,2xx,4xx,5xx

200:网络请求成功

400:错误请求

404:网页没有找到

500:服务器内部错误

3。初始异步请求对象

代码:xmlHttp.open('请求方式','服务器端访问地址','是否异步请求')
xmlHttp.open('post','loginServlet?name=zhangsan&pwd=123',true)

4。异步对象发送请求

xmlHttp.send()

问2:如何获取服务器端返回的数据?

使用异步对象的属性responseText,xmlHttp.responseText

xmlHttp.onreadystatechange = function(){
	//处理请求的状态变化
    var data = xmlHttp.responseText;
    document.getElementById("name").value = data;
}

问3:为啥处理数据在第二步骤?

理论上在第二步骤的给创建的对象绑定事件,该事件会有回调处理

回调处理,当请求的状态变化时,异步对象会自动调用onreadystatechange事件对应的函数

当请求的状态为1,回调一次onreadystatechange事件;当请求的状态为2,再回调一次onreadystatechange事件。

3.ajax的练习

在idea创建web项目过程,保姆级别的教程

https://blog.csdn.net/llplllll/article/details/116903198

需求1:全局刷新,计算bmi
在这里插入图片描述
在这里插入图片描述

BmiServlet.java

package com.org.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//servlet
public class BmiServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response){

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//        接收请求参数
        String strName = request.getParameter("name");
        String height = request.getParameter("h");
        String weight = request.getParameter("w");

//        计算BMI:bmi = 体重 / 身高的平方
        float h = Float.valueOf(height);
        float w = Float.valueOf(weight);

        float bmi = w / (h*h);

//        判断bmi的范围
        String msg = "";
        if(bmi <= 18.5){
            msg = "您偏瘦";
        }else if(bmi > 18.5 && bmi <= 23.9){
            msg = "您的bmi正常";
        }else if(bmi > 24 && bmi <= 27){
            msg = "您过重";
        }else{
            msg = "您该减肥了";
        }
        System.out.println("msg="+msg);
        msg = "您好:"+strName+"先生/女士,您的bmi值是:"+bmi+","+msg;


//        把数据存入request
        request.setAttribute("msg",msg);

//        转发到新的页面
        request.getRequestDispatcher("/result.jsp").forward(request,response);
    }
}

index.jps

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>全局刷新</title>
  </head>
  <body>
    <p>全局刷新计算BMI</p>
    <form action="BmiServlet" method="post">
      姓名:<input type="text" name="name"><br/>
      体重(公斤):<input type="text" name="w"><br/>
      身高(米):<input type="text" name="h"><br/>
      <input type="submit" value="submit">
    </form>
  </body>
</html>

result.jsp

<%--
  Created by IntelliJ IDEA.
  User: PPPoA
  Date: 2021/12/20
  Time: 19:31
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>结果页面</title>
</head>
<body>
    <p>显示bmi计算结果</p>
    <h3>${msg}</h3>
</body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>BmiServlet</servlet-name>
        <servlet-class>com.org.controller.BmiServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BmiServlet</servlet-name>
        <url-pattern>/bmiServlet</url-pattern>
    </servlet-mapping>
</web-app>

运行成功!

需求2:局部刷新,ajax
在这里插入图片描述
在这里插入图片描述

BmiAjaxServlet.java

package com.org.controller;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//servlet
public class BmiAjaxServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response){
        
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("=================ajax发起请求==================");
        PrintWriter writer = response.getWriter();
        writer.println("hello Ajax");
        writer.flush();
        writer.close();
    }
}

index.jsp

<%--
  Created by IntelliJ IDEA.
  User: PPPoA
  Date: 2021/12/20
  Time: 20:11
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>局部刷新-ajax</title>
    <script type="text/javascript">
      // 使用内存中的异步对象,代替浏览器发起请求。异步对象使用js创建和管理
      function doAjax(){
        var xmlHttpRequest = new XMLHttpRequest();
        xmlHttpRequest.onreadystatechange = function (){
          // alert("readyState属性值==========="+xmlHttpRequest.readyState + "|status:" + xmlHttpRequest.status)
          if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
            alert(xmlHttpRequest.responseText)
          }

        }
        xmlHttpRequest.open("get","bmiAjax",true);

        xmlHttpRequest.send();
      }
    </script>
  </head>
  <body>
    <p>局部刷新-ajax-计算bmi</p>
    <div>
      姓名:<input type="text" id="name"><br/>
      体重(公斤):<input type="text" id="w"><br/>
      身高(米):<input type="text" id="h"><br/>
      <input type="button" value="计算bmi" onclick="doAjax()">
    </div>
  </body>
</html>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>BmiAjaxServlet</servlet-name>
        <servlet-class>com.org.controller.BmiAjaxServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BmiAjaxServlet</servlet-name>
        <url-pattern>/bmiAjax</url-pattern>
    </servlet-mapping>
</web-app>

运行成功!

测试readyState属性和Status属性

<script type="text/javascript">
      // 使用内存中的异步对象,代替浏览器发起请求。异步对象使用js创建和管理
      function doAjax(){
        var xmlHttpRequest = new XMLHttpRequest();
        xmlHttpRequest.onreadystatechange = function (){
          alert("readyState属性值==========="+xmlHttpRequest.readyState + "|status:" + xmlHttpRequest.status)
          if(xmlHttpRequest.readyState == 4 && xmlHttpRequest.status == 200){
            alert(xmlHttpRequest.responseText)
          }

        }
        xmlHttpRequest.open("get","bmiAjax",true);

        xmlHttpRequest.send();
      }
</script>
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

皮皮怪鼠

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

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

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

打赏作者

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

抵扣说明:

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

余额充值