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

简介: 【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

目录
相关文章
|
8月前
|
存储 缓存 负载均衡
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
|
8月前
|
传感器 人工智能 物联网
穿戴科技新风尚:智能服装设计与技术全解析
穿戴科技新风尚:智能服装设计与技术全解析
680 85
|
8月前
|
人工智能 API 语音技术
HarmonyOS Next~鸿蒙AI功能开发:Core Speech Kit与Core Vision Kit的技术解析与实践
本文深入解析鸿蒙操作系统(HarmonyOS)中的Core Speech Kit与Core Vision Kit,探讨其在AI功能开发中的核心能力与实践方法。Core Speech Kit聚焦语音交互,提供语音识别、合成等功能,支持多场景应用;Core Vision Kit专注视觉处理,涵盖人脸检测、OCR等技术。文章还分析了两者的协同应用及生态发展趋势,展望未来AI技术与鸿蒙系统结合带来的智能交互新阶段。
532 31
|
8月前
|
编解码 监控 网络协议
RTSP协议规范与SmartMediaKit播放器技术解析
RTSP协议是实时流媒体传输的重要规范,大牛直播SDK的rtsp播放器基于此构建,具备跨平台支持、超低延迟(100-300ms)、多实例播放、高效资源利用、音视频同步等优势。它广泛应用于安防监控、远程教学等领域,提供实时录像、快照等功能,优化网络传输与解码效率,并通过事件回调机制保障稳定性。作为高性能解决方案,它推动了实时流媒体技术的发展。
477 5
|
8月前
|
数据采集 机器学习/深度学习 存储
可穿戴设备如何重塑医疗健康:技术解析与应用实战
可穿戴设备如何重塑医疗健康:技术解析与应用实战
321 4
|
8月前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术如何重塑客服系统?解析合力亿捷AI智能客服系统实践案例
本文探讨了人工智能技术在客服系统中的应用,涵盖技术架构、关键技术和优化策略。通过感知层、认知层、决策层和执行层的协同工作,结合自然语言处理、知识库构建和多模态交互技术,合力亿捷客服系统实现了智能化服务。文章还提出了用户体验优化、服务质量提升和系统性能改进的方法,并展望了未来发展方向,强调其在客户服务领域的核心价值与潜力。
489 6
|
8月前
|
存储 机器学习/深度学习 人工智能
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
|
8月前
|
监控 负载均衡 安全
静态IP代理与动态IP代理:提升速度与保障隐私的技术解析
本文探讨了静态IP代理和动态IP代理的特性和应用场景。静态IP代理通过高质量服务提供商、网络设置优化、定期更换IP与负载均衡及性能监控提升网络访问速度;动态IP代理则通过隐藏真实IP、增强安全性、绕过封锁和提供独立IP保障用户隐私。结合实际案例与代码示例,展示了两者在不同场景下的优势,帮助用户根据需求选择合适的代理服务以实现高效、安全的网络访问。
292 1
|
8月前
|
机器学习/深度学习 数据采集 自然语言处理
基于Python的情感分析与情绪识别技术深度解析
本文探讨了基于Python的情感分析与情绪识别技术,涵盖基础概念、实现方法及工业应用。文中区分了情感分析与情绪识别的核心差异,阐述了从词典法到深度学习的技术演进,并通过具体代码展示了Transformers架构在细粒度情感分析中的应用,以及多模态情绪识别框架的设计。此外,还介绍了电商评论分析系统的构建与优化策略,包括领域自适应训练和集成学习等方法。未来,随着深度学习和多模态数据的发展,该技术将更加智能与精准。
502 1
|
8月前
|
负载均衡 JavaScript 前端开发
分片上传技术全解析:原理、优势与应用(含简单实现源码)
分片上传通过将大文件分割成多个小的片段或块,然后并行或顺序地上传这些片段,从而提高上传效率和可靠性,特别适用于大文件的上传场景,尤其是在网络环境不佳时,分片上传能有效提高上传体验。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

推荐镜像

更多
  • DNS