使用原生Ajax技术实现异步交互

实现原理
  • 使用原生原生Ajax技术实现异步交互,就是使用Ajax的原生异步对象XMLHttpRequest,来进行创建对象、绑定事件、初始化数据、发送数据的操作过程。
实现步骤
  • 第一步,利用XMLHttpRequest创建异步对象。

//1.创建异步对象
var xmlHttp = new XMLHttpRequest();

  • 第二部,利用异步对象绑定触发事件函数.

xmlHttp.onreadystatechange = function () {}

  • 第三步,初始请求参数

xmlHttp.open(“请求方式”, “请求路径” , 是否异步(默认为异步));

  • 第四步,发送请求

xmlHttp.send();

  • 其中在第二步中,需要对请求的的状态进行判断,从而实现后续操作,进行状态判断利用readyState方法实时读取请求的各种状态:

异步对象的属性readyState,表示异步对象请求的状态变化
0:表示创建异步对象时 ,对应new XMLHttpRequest()
1:初始异步请求对象 xmlHttp.open()
2:发送请求 xmlHtttp.send()
3:从服务器端接收到数据(原始数据,没有被开发人员处理的数据),此过程为异步请求对象内部使用,开发人员无法干预
4:异步对象将接收完的数据,在内部处理完成后,此时需要开发人员对数据进一步处理。

  • 如果为post请求,open方法中的请求路径不能携带参数,参数需要放在send方法中进行传输,但是必须要设置setRequestHeader方法设置请求头属性,将send中的参数设置为键值对形式,便于后台使用数据,如果不设置请求头属性,则会将send方法中的参数整体返回,不能以键值对的形式进行拆分,如题代码设置如下:

//open中不能携带参数
xmlHttp.open(“post”, “bmiServlet”, true);
//设置请求头属性,将send中参数设置为键值对形式
xmlHttp.setRequestHeader(“Content-Type”,“application/x-www-form-urlencoded”);
//设置请求参数
xmlHttp.send("“name=zs&height=1.7&wigth=78”);

代码展示
  • index.jsp展示:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>BMI测定中心</title>
    <script type="text/javascript">

        function doAjax() {
            //1.创建异步对象
            var xmlHttp = new XMLHttpRequest();
            //2.绑定事件
            xmlHttp.onreadystatechange = function () {
                //alert("异步对象状态变化:---"+xmlHttp.readyState);
                if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
                    //alert(xmlHttp.responseText);
                    var data = xmlHttp.responseText;
                    //更新dom对象,更新页面数据
                    document.getElementById("showInfo").innerText = data;
                }
            }
            var name = document.getElementById("name").value;
            var h = document.getElementById("height").value;
            var w = document.getElementById("wigth").value;
            var param = "name=" + name + "&height=" + h + "&wigth=" + w;
            //3.初始请求参数
            xmlHttp.open("get", "bmiServlet?" + param, true);
            //4.发送请求
            xmlHttp.send();
        }
    </script>
</head>
<body>
<h3>BMI测定中心</h3>
<span>姓名:</span><input type="text" id="name"><br>
<span>身高:</span><input type="text" id="height"><br>
<span>体重:</span><input type="text" id="wigth"><br>
<input type="submit" value="提交" onclick="doAjax()">
<br>
<br>
<%-- 展示结果div层 --%>
<div id="showInfo">
</div>
</body>
</html>

  • Servlet代码展示:
package indi.dsl.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "BmiServlet")
public class BmiServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        String height = request.getParameter("height");
        String wigth = request.getParameter("wigth");
        float h = Float.valueOf(height);
        float w = Float.valueOf(wigth);
        float bmi = w/(h*h);
        String msg = "";
        if (bmi>=26){
            msg = "尊敬的:"+name+"先生,您的结果超重。";
        }
        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.println(msg);
        writer.flush();
        writer.close();

    }
}

  • 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>indi.dsl.servlet.BmiServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>bmiServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值