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);
    }

}
最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容

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