15.《JavaEE 学习笔记》Ajax

1、AJAX 简介

AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。

AJAX 不是新的编程语言,而是一种使用现有标准的新方法。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

2、AJAX的组成元素

Ajax技术主要包含四个组件,即JavaScript、CSS、DOM以及XMLHttpRequest对象。

2.1 XMLHttpRequest

XMLHttpRequest是Ajax技术的核心对象,使用Ajax技术都是从XMLHttpRequest对象开始。在Ajax应用程序中,XMLHttpRequest对象负责将用户信息以异步方式发送到服务器端,并接收服务器响应的信息和数据。

创建 XMLHttpRequest 对象:

var xmlhttp;
if(window.ActiveXObject) {
    console.log("操作提示:您的浏览器是IE浏览器。");
    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} else if(window.XMLHttpRequest) {
    console.log("操作提示:您的浏览器不是IE浏览器。");
    xmlHttp = new XMLHttpRequest();
    }

XMLHttpRequest的属性:

  • readyState
  • 存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。
  • 0: 请求未初始化
  • 1: 服务器连接已建立
  • 2: 请求已接收
  • 3: 请求处理中
  • 4: 请求已完成,且响应已就绪
  • status
  • 200: "OK"
  • 404: 未找到页面
  • onreadystatechange
  • 存储函数(或函数名),每当 readyState 属性改变时,就会调用该函数。

2.2 AJAX - 向服务器发送请求

方法:

(1)open(method,url,async)

规定请求的类型、URL 以及是否异步处理请求。

  • method:请求的类型;GET 或 POST
  • url:文件在服务器上的位置
  • async:true(异步)或 false(同步)

(2)send(string)

将请求发送到服务器。

  • string:仅用于 POST 请求

2.3 AJAX - 服务器响应

属性:

  • responseText获得字符串形式的响应数据。
  • responseXML获得 XML 形式的响应数据。

(1)responseText 属性

如果来自服务器的响应并非 XML,请使用 responseText 属性。

responseText 属性返回字符串形式的响应,因此您可以这样使用:

document.getElementById("myDiv").innerHTML=xmlhttp.responseText;

(2)responseXML 属性

如果来自服务器的响应是 XML,而且需要作为 XML 对象进行解析,请使用 responseXML 属性:

xmlDoc=xmlhttp.responseXML;

代码案例:

模仿网站在线注册,填写完邮箱和手机号,异步请求,检测邮箱和手机号是否已经注册。

login.jsp代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>登录</title>
        <script>
            var baseUrl = "reg-servlet";
            var xmlHttp;
            var responseText;
            var onBlurId;
            
            //创建创建 XMLHttp 对象
            function createXmlHttp(name,value) {
                if(window.ActiveXObject) {
                    console.log("操作提示:您的浏览器是IE浏览器。");
                    xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
                } else if(window.XMLHttpRequest) {
                    console.log("操作提示:您的浏览器不是IE浏览器。");
                    xmlHttp = new XMLHttpRequest();
                }

                //注册监听或者回调函数
                xmlHttp.onreadystatechange = callback;
                //1:打开状态
                //传递参数
                var url = baseUrl + "?" + name+"="+value;
                //GET方法打开,第三个参数如果为true,那么为异步请求,将不会刷新整个页面.
                xmlHttp.open("GET", url, true);
                //2:发送状态
                //Get方式的send()
                xmlHttp.send(null);             
            }

            
            //回调函数,处理响应信息
            function callback() {
                console.log("回调函数已调用");
                //setResponseText(xmlHttp.readyState);
                //获取响应内容
                if(xmlHttp.readyState == 4) {
                    if(xmlHttp.status == 200) {
                        responseText = xmlHttp.responseText;
                        //console.log(responseText);
                        if(responseText == "true"){
                            setResponseText(true);
                        }else{
                            setResponseText(false);
                        }                   
                    }
                }
            }

            //通过处理后的响应信息修改提醒文本
            function setResponseText(flag) {
                var id;
                var responseText;
                if(onBlurId == "e-mail"){
                    id = "pText1";
                    responseText = document.getElementById(id);
                    if(flag){
                        responseText.style.color = "green";
                        responseText.innerText = "该邮箱可以注册";
                    }else{
                        responseText.style.color = "red";
                        responseText.innerText = "该邮箱已经被注册";
                    }
                }else{
                    id = "pText2";
                    responseText = document.getElementById(id);
                    if(flag){
                        responseText.style.color = "green";
                        responseText.innerText = "该手机号可以注册";
                    }else{
                        responseText.style.color = "red";
                        responseText.innerText = "该手机号已经被注册";
                    }
                }   
            }
            
            
            //重写失去焦点事件
            function onBlur(id) {
                var module = document.getElementById(id);
                var name = module.name;
                var value = module.value;
                //var url = baseUrl + "?" + name + "=" + value;
                onBlurId = id;          
                console.log(name + "失去焦点");
                console.log(name+":"+value);
                createXmlHttp(name,value);
            }
            
        </script>
    </head>

    <body>
        <form id="Login" action="" method="post">
            <table>
                <tr>
                    <td>邮箱:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input name="e-mail" id="e-mail" type="text" onblur="onBlur(id)" /></td>
                    <td><p id="pText1" style="color: red;"></p></td>
                </tr>
                <tr>
                    <td>手机号: <input name="phoneNum" type="text" id="phoneNum" onblur="onBlur(id)" /></td>
                    <td><p id="pText2" style="color: red;"></p></td>
                </tr>

            </table>

            <input type="button" value="登录"  onclick="setResponseText(456)"/>
            <input type="button" value="注册" />          
        </form>
    </body>

</html>

regServlet.java代码:

package com.company.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/reg-servlet")
public class regServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       

    public regServlet() {
        super();
        
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");
        Enumeration<String> names = request.getParameterNames();
        System.out.println("-----------------");
        String responseTest = "";
        while(names.hasMoreElements()) {
            String name = names.nextElement();
            String value = request.getParameter(name);
            
            //此处模拟数据库检测,查询是否已经注册
            if(name.equals("e-mail")) {
                if(value.equals("2584966xxx@qq.com")) {
                    System.out.println("该邮箱已注册");
                    responseTest = "false";
                }else {
                    System.out.println("该邮箱可以注册");
                    responseTest = "true";
                }   
            }else {
                if(value.equals("15592237xxx")) {
                    System.out.println("该手机号已注册");
                    responseTest = "false";
                }else {
                    System.out.println("该手机号可以注册");
                    responseTest = "true";
                }
            }
        }
        PrintWriter out=response.getWriter();
        out.print(responseTest);
    }


    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        doGet(request, response);
    }

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Ajax学习笔记 Ajax简介 1. Ajax是什么? Ajax : Asynochronous javascri...
    月上秦少阅读 3,122评论 0 1
  • 第一章: 基础 1.1 是什么? AJAX = Asynchronous JavaScript and XML(异...
    张中华阅读 4,489评论 0 8
  • 从下面这个简单的AJAX实例中,一步一步来分析代码每一部分的作用及功能,并对相关的名词进行了解释。 一个简单的AJ...
    Ginkela阅读 2,790评论 0 0
  • 开头: 学了好久的AJAX,最近在买的红宝书回来之后又看了一遍AJAX完后配合着w3c上的ajax教程想着总结点东...
    是乃德也是Ned阅读 1,670评论 0 3
  • 一、Ajax技术概念 Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。Ajax的全称是As...
    远远暖暖阅读 2,828评论 0 0

友情链接更多精彩内容