【AJAX】AJAX技术详细解析以及实例(2)

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 【AJAX】AJAX技术详细解析以及实例

GET方式实例演示:

index.jsp:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<head>
<title>Ajax技术</title>
<script type="text/javascript">
    var xmlhttp;
    //1 创建一个ajax对象
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    function checkGet(obj) {
        //进行数据格式检验-这里省略了。
        var name = obj.value;//获取用户填入的用户名
        var url = "<c:url value='/OneServlet?name=" + name + "' />";
        //2 设置通讯方式和地址
        xmlhttp.open("GET", url, true);//异步--多线程
        //3 设置访问成功后的 js对象(回调函数)
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {//服务器的响应消息接收完毕
                if (xmlhttp.status == 200) {//服务器正常响应
                    var txt = xmlhttp.responseText;//后台的响应信息
                    alert("返回的信息是:" + txt);
                    succ(txt);
                } else {
                    alert("服务器响应出错信息,错误代码:" + xhr.status);
                }
            }
        };
        //4发送---Get方式,没有参数(请求体) ---数据在请求地址中
        xmlhttp.send();
        //如果这里设置xmlhttp.open("GET", url, false);//同步
        //alert("OKOK");//同步时,必须等到ajax回来之后才会执行到send之后。异步时不用等
    }
    function succ(obj) {
        document.getElementById("divGet").innerHTML = obj;
        //divGet.innerHTML=obj;
    }
</script>
<form action="">
        <h3>GET方式的ajax演示</h3>
        Name-GET方式提交<input type="text" name="name" onblur="checkGet(this);" />
        <div id="divGet"></div>
        <h3>POST方式的ajax演示</h3>
        Name-POST方式提交<input type="text" name="name" onblur="checkPost(this);" />
        <div id="divPost"></div>
        <br /> <br /> <input type="submit" value="注册">
    </form>

OneServlet:

private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        String name = request.getParameter("name");
//      try { //用来演示设置xmlhttp.open("GET", url, false);//同步时,效果更明显而使用的
//          Thread.sleep(3000);
//      } catch (InterruptedException e) {
//          e.printStackTrace();
//      }
        out.println(name+"通过GET方式来访\t\n时间是:"+sdf.format(new Date()) );
    }

web.xml:

写Servlet-不要忘记配置web.xml

<servlet>
    <servlet-name>OneServlet</servlet-name>
    <servlet-class>cn.hncu.servlet.OneServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>OneServlet</servlet-name>
    <url-pattern>/OneServlet</url-pattern>
  </servlet-mapping>

演示结果:

image.png

image.png

POST方式实例演示:

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<head>
<title>Ajax技术</title>
<script type="text/javascript">
    var xmlhttp;
    //1 创建一个ajax对象
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    function checkPost(obj){
        var name=obj.value;//获取用户输入的用户名
        var url = "<c:url value='/OneServlet'/>";
        xmlhttp.open("POST", url, true);
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4){//服务器的响应消息接收完毕
                   if(xmlhttp.status==200){//服务器正常响应
                       var txt = xmlhttp.responseText;//后台的响应信息
                       alert("返回的信息是:"+txt);
                       succPost(txt);
                   }else{
                       alert("服务器响应出错信息,错误代码:"+xhr.status);
                   }
               }
        };
        //注意要设置请求头!!!
        xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlhttp.send("name="+name);
    }
    function succPost(obj){
        divPost.innerHTML=obj;
    }
</script>
</head>
<body>
    <form action="">
        <h3>POST方式的ajax演示</h3>
        Name-POST方式提交<input type="text" name="name" onblur="checkPost(this);" />
        <div id="divPost"></div>
        <br /> <br /> <input type="submit" value="注册">
    </form>
</body>

OneServlet:

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        String name = request.getParameter("name");
        //int i=100/0;//故意让后台响应500的错误信息
        out.println(name+"通过POST方式来访\t\n时间是:"+sdf.format(new Date()) );
    }

封装AJAX:

是不是感觉上面这样写有点麻烦,其实我们完全可以先配置好ajax函数,在用的时候传入参数就可以了。

我们只要new Ajak(),然后调用里面的get、post函数,进行传值就可以了。

post方式需要多传入一个data参数,get方式就可以不用,因为参数在url中传的。

ajax.js

function Ajax(){
    var xmlhttp;
    //1 创建一个ajax对象
    if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    } else {// code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    //url为请求的链接或文件。
    //succ是status返回为200后运行的函数。
    //failure是status返回不为200后运行的函数。
    this.get=function(url,succ,failure){
        //2 设置通讯方式和地址
        xmlhttp.open("GET",url,true);//异步--多线程
        //3 设置访问成功后的 js对象(回调函数)
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4){//服务器的响应消息接收完毕
                if(xmlhttp.status==200){//服务器正常响应
                    var txt = xmlhttp.responseText;//后台的响应信息
                    succ(txt);
                }else{
                    if(failure){
                        failure(xmlhttp.status);
                     }
                }
            }
        };
        //4发送---Get方式,没有参数(请求体) ---数据在请求地址中
        xmlhttp.send();
    };
    this.post= function(url,data,succ, failure){
        //2 设置通讯方式和地址
        xmlhttp.open("POST",url,true);//异步--多线程
        //3 设置访问成功后的 js对象(回调函数)
        xmlhttp.onreadystatechange=function(){
            if(xmlhttp.readyState==4){//服务器的响应消息接收完毕
                if(xmlhttp.status==200){//服务器正常响应
                    var txt = xmlhttp.responseText;//后台的响应信息
                    succ(txt);
                }else{
                    if(failure){
                        failure(xmlhttp.status);
                     }
                }
            }
        };
        //4设置请求头
        xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        //5发送---Post方式,有参数(请求体) <---数据 ※
        xmlhttp.send(data);
    };
}

演示的JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ajax技术</title>
<script type="text/javascript" src="<c:url value='js/ajax.js'/>"></script>
<script type="text/javascript">
    function checkGet(obj) {
        //进行数据格式检验-这里省略了。
        var name = obj.value;//获取用户填入的用户名
        var url = "<c:url value='/OneServlet?name=" + name + "' />";
        var ajax = new Ajax();
        ajax.get(url, succ, failure);
    }
    function succ(obj) {
        document.getElementById("divGet").innerHTML = obj;
    }
    function checkPost(obj) {
        var name = obj.value;//获取用户输入的用户名
        var url = "<c:url value='/OneServlet'/>";
        var ajax = new Ajax();
        ajax.post(url,"name="+name, succPost, failure);
    }
    function succPost(obj) {
        divPost.innerHTML = obj;
    }
    function failure(obj) {
        alert("服务器响应的错误信息代码:" + obj);
    }
</script>
</head>
<body>
    <form action="">
        <h3>GET方式的ajax演示</h3>
        Name-GET方式提交<input type="text" name="name" onblur="checkGet(this);" />
        <div id="divGet"></div>
        <h3>POST方式的ajax演示</h3>
        Name-POST方式提交<input type="text" name="name" onblur="checkPost(this);" />
        <div id="divPost"></div>
        <br /> <br /> <input type="submit" value="注册">
    </form>
</body>
</html>

servlet还是和刚才的是一个!

演示结果:

返回结果为200-正确的页面:

image.png

返回结果为500-错误的页面:

让servlet出一个异常就可以模仿出来了。

例如:int a=12/0;


image.png

目录
相关文章
|
15天前
|
网络协议 网络安全 网络虚拟化
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算
本文介绍了十个重要的网络技术术语,包括IP地址、子网掩码、域名系统(DNS)、防火墙、虚拟专用网络(VPN)、路由器、交换机、超文本传输协议(HTTP)、传输控制协议/网际协议(TCP/IP)和云计算。通过这些术语的详细解释,帮助读者更好地理解和应用网络技术,应对数字化时代的挑战和机遇。
56 3
|
15天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
48 2
|
18天前
|
监控 关系型数据库 MySQL
MySQL自增ID耗尽应对策略:技术解决方案全解析
在数据库管理中,MySQL的自增ID(AUTO_INCREMENT)属性为表中的每一行提供了一个唯一的标识符。然而,当自增ID达到其最大值时,如何处理这一情况成为了数据库管理员和开发者必须面对的问题。本文将探讨MySQL自增ID耗尽的原因、影响以及有效的应对策略。
57 3
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
思通数科AI平台在尽职调查中的技术解析与应用
思通数科AI多模态能力平台结合OCR、NLP和深度学习技术,为IPO尽职调查、融资等重要交易环节提供智能化解决方案。平台自动识别、提取并分类海量文档,实现高效数据核验与合规性检查,显著提升审查速度和精准度,同时保障敏感信息管理和数据安全。
81 11
|
20天前
|
Kubernetes Cloud Native 云计算
云原生技术深度解析:重塑企业IT架构的未来####
本文深入探讨了云原生技术的核心理念、关键技术组件及其对企业IT架构转型的深远影响。通过剖析Kubernetes、微服务、容器化等核心技术,本文揭示了云原生如何提升应用的灵活性、可扩展性和可维护性,助力企业在数字化转型中保持领先地位。 ####
|
21天前
|
自然语言处理 并行计算 数据可视化
免费开源法律文档比对工具:技术解析与应用
这款免费开源的法律文档比对工具,利用先进的文本分析和自然语言处理技术,实现高效、精准的文档比对。核心功能包括文本差异检测、多格式支持、语义分析、批量处理及用户友好的可视化界面,广泛适用于法律行业的各类场景。
|
23天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
38 1
|
5天前
|
存储 供应链 算法
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景
21 0
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
探索深度学习与自然语言处理的前沿技术:Transformer模型的深度解析
23 0
|
15天前
|
存储 供应链 物联网
深入解析区块链技术的核心原理与应用前景
深入解析区块链技术的核心原理与应用前景