【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

目录
相关文章
|
18天前
|
机器学习/深度学习 人工智能 自然语言处理
AI技术深度解析:从基础到应用的全面介绍
人工智能(AI)技术的迅猛发展,正在深刻改变着我们的生活和工作方式。从自然语言处理(NLP)到机器学习,从神经网络到大型语言模型(LLM),AI技术的每一次进步都带来了前所未有的机遇和挑战。本文将从背景、历史、业务场景、Python代码示例、流程图以及如何上手等多个方面,对AI技术中的关键组件进行深度解析,为读者呈现一个全面而深入的AI技术世界。
90 10
|
1天前
|
自然语言处理 文字识别 数据处理
多模态文件信息抽取:技术解析与实践评测!
在大数据和人工智能时代,企业和开发者面临的挑战是如何高效处理多模态数据(文本、图像、音频、视频)以快速提取有价值信息。传统方法效率低下,难以满足现代需求。本文将深度评测阿里云的多模态文件信息抽取解决方案,涵盖部署、应用、功能与性能,揭示其在复杂数据处理中的潜力。通过自然语言处理(NLP)、计算机视觉(CV)、语音识别(ASR)等技术,该方案助力企业挖掘多模态数据的价值,提升数据利用效率。
12 4
多模态文件信息抽取:技术解析与实践评测!
|
4天前
|
域名解析 负载均衡 安全
DNS技术标准趋势和安全研究
本文探讨了互联网域名基础设施的结构性安全风险,由清华大学段教授团队多年研究总结。文章指出,DNS系统的安全性不仅受代码实现影响,更源于其设计、实现、运营及治理中的固有缺陷。主要风险包括协议设计缺陷(如明文传输)、生态演进隐患(如单点故障增加)和薄弱的信任关系(如威胁情报被操纵)。团队通过多项研究揭示了这些深层次问题,并呼吁构建更加可信的DNS基础设施,以保障全球互联网的安全稳定运行。
|
4天前
|
缓存 网络协议 安全
融合DNS技术产品和生态
本文介绍了阿里云在互联网基础资源领域的最新进展和解决方案,重点围绕共筑韧性寻址、赋能新质生产展开。随着应用规模的增长,基础服务的韧性变得尤为重要。阿里云作为互联网资源的践行者,致力于推动互联网基础资源技术研究和自主创新,打造更韧性的寻址基础服务。文章还详细介绍了浙江省IPv6创新实验室的成立背景与工作进展,以及阿里云在IPv6规模化部署、DNS产品能力升级等方面的成果。此外,阿里云通过端云融合场景下的企业级DNS服务,帮助企业构建稳定安全的DNS系统,确保企业在数字世界中的稳定运行。最后,文章强调了全链路极致高可用的企业DNS解决方案,为全球互联网基础资源的创新提供了中国标准和数字化解决方案。
|
4天前
|
缓存 边缘计算 网络协议
深入解析CDN技术:加速互联网内容分发的幕后英雄
内容分发网络(CDN)是现代互联网架构的重要组成部分,通过全球分布的服务器节点,加速网站、应用和多媒体内容的传递。它不仅提升了访问速度和用户体验,还减轻了源站服务器的负担。CDN的核心技术包括缓存机制、动态加速、流媒体加速和安全防护,广泛应用于静态资源、动态内容、视频直播及大文件下载等场景,具有低延迟、高带宽、稳定性强等优势,有效降低成本并保障安全。
25 3
|
15天前
|
数据挖掘 vr&ar C++
让UE自动运行Python脚本:实现与实例解析
本文介绍如何配置Unreal Engine(UE)以自动运行Python脚本,提高开发效率。通过安装Python、配置UE环境及使用第三方插件,实现Python与UE的集成。结合蓝图和C++示例,展示自动化任务处理、关卡生成及数据分析等应用场景。
73 5
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
秒级响应 + 99.9%准确率:法律行业文本比对技术解析
本工具基于先进AI技术,采用自然语言处理和语义匹配算法,支持PDF、Word等格式,实现法律文本的智能化比对。具备高精度语义匹配、多格式兼容、高性能架构及智能化标注与可视化等特点,有效解决文本复杂性和法规更新难题,提升法律行业工作效率。
|
22天前
|
数据采集 存储 JavaScript
网页爬虫技术全解析:从基础到实战
在信息爆炸的时代,网页爬虫作为数据采集的重要工具,已成为数据科学家、研究人员和开发者不可或缺的技术。本文全面解析网页爬虫的基础概念、工作原理、技术栈与工具,以及实战案例,探讨其合法性与道德问题,分享爬虫设计与实现的详细步骤,介绍优化与维护的方法,应对反爬虫机制、动态内容加载等挑战,旨在帮助读者深入理解并合理运用网页爬虫技术。
|
28天前
|
机器学习/深度学习 自然语言处理 监控
智能客服系统集成技术解析和价值点梳理
在 2024 年的智能客服系统领域,合力亿捷等服务商凭借其卓越的技术实力引领潮流,它们均积极应用最新的大模型技术,推动智能客服的进步。
70 7
|
1月前
|
存储 网络协议 算法
【C语言】进制转换无难事:二进制、十进制、八进制与十六进制的全解析与实例
进制转换是计算机编程中常见的操作。在C语言中,了解如何在不同进制之间转换数据对于处理和显示数据非常重要。本文将详细介绍如何在二进制、十进制、八进制和十六进制之间进行转换。
39 5

推荐镜像

更多