当前位置:

首页 > 编程开发 > Ajax验证用户名是否存在的实例代码

Ajax验证用户名是否存在的实例代码

Ajax验证用户名是否存在的实例代码详解 在日常的Web项目开发中,注册功能里的用户名查重,几乎是每个新手必做的练习。这不,为了让大家对Ajax实现实时验证的流程有个透彻的理解,今天咱们就来拆解一个非常典型的例子,看看从前端页面、Ja vaScript逻辑,到后台Servlet、Service层,乃

Ajax验证用户名是否存在的实例代码详解

在日常的Web项目开发中,注册功能里的用户名查重,几乎是每个新手必做的练习。这不,为了让大家对Ajax实现实时验证的流程有个透彻的理解,今天咱们就来拆解一个非常典型的例子,看看从前端页面、Ja vaScript逻辑,到后台Servlet、Service层,乃至最终的数据库查询,这整条链路是如何协同工作的。

JSP页面

首先,我们来看前端的“阵地”。代码很简单,核心就是一个文本输入框,它的使命是捕捉用户的每一次输入。


    

用户名:

这里有几个关键点值得注意:一是通过onblur="CheckUserName()"事件,用户的光标一旦离开这个输入框,验证函数就会被触发。二是那个不起眼的

标签,它可是个“消息公告栏”,后端返回的验证结果就靠它来动态展示了。

JS文件夹下的register.js

重头戏来了。前端的“大脑”逻辑都写在这里,它负责发起请求、处理响应、并更新页面提示。

//创建XMLHttpRequest对象,这是Ajax的基石
function ajaxFunction(){
    var xmlHttp;
    try{
        // 适用于IE7+, Firefox, Chrome, Opera, Safari
        xmlHttp=new XMLHttpRequest();
    } catch(e){
        try{
            //兼容老版本Internet Explorer
            xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
        } catch(e){
            try{
                // 适用于更古老的IE6, IE5
                xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
            } catch(e){
                xmlHttp=false;
            }
        }
    }
    return xmlHttp;
}

var flag=true;
function CheckUserName(){
    //获取用户在输入框里填写的值
    var name=document.getElementById("r_name").value;

    //第一关:非空校验
    if(name==""||name==null){
        document.getElementById("p01").innerHTML="用户名不能为空!";
        flag=false;
    }else{
        //1.创建核心的Ajax请求对象
        var request=ajaxFunction();

        //2.配置并发送请求
        request.open("POST","/StudyWeb/CheckUserNameServlet",true); //true表示采用异步模式

        //3.注册一个监听器,专门等着服务器回信
        request.onreadystatechange=function(){
            //readyState==4代表请求完成,status==200代表服务器成功响应
            if(request.readyState==4 && request.status==200){
                var data=request.responseText; //拿到Servlet返回的纯文本数据

                //根据返回的数据,更新页面提示
                if(data == 1){
                    document.getElementById("p01").innerHTML="用户名已存在!";
                    flag=false;
                }else{
                    document.getElementById("p01").innerHTML="√";
                    flag=true;
                }
            }
        }

        //如果是POST方式提交额外数据,必须设置这个请求头
        request.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");

        //4.正式发出请求,并把用户名作为参数带过去
        request.send("name="+name);
    }
    return flag;
}

这段代码清晰地展示了Ajax的核心四步曲:创建对象、配置请求、监听状态、发送数据。特别需要注意那个onreadystatechange事件,它就像是派出去的“信使”,服务器有任何风吹草动,它都能实时感知并处理。

后台StudyWeb项目下的CheckUserNameServlet

请求到了后台,Servlet首先登场,扮演着“ dispatcher(调度员)”的角色。

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    //拿到前端传过来的用户名参数
    String r_name=request.getParameter("name");
    try {
        //将任务交给Service层进行业务逻辑判断
        boolean isExist=userService.CheckUserName(r_name);
        System.out.println("isExist"+isExist);

        //将判断结果以最简单的文本形式(1或2)返回给前端
        if(isExist){
            response.getWriter().println(1); //1代表用户名已存在
        }else{
            response.getWriter().println(2); //2代表用户名可用
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Servlet的工作非常聚焦:获取参数、调用服务、返回结果。它不关心具体的查询逻辑,只负责流程的衔接与数据的转发。

UserDaoImpl中方法的实现

最后,我们抵达数据持久层,这里是直接与数据库对话的地方。

public boolean CheckUserName(String u_name) {
    boolean flag=false;
    String sql="select u_id,u_name,u_password,u_email,u_phone from user where u_name=?";
    conn=super.getConnection();
    try {
        pstmt=conn.prepareStatement(sql);
        pstmt.setString(1,u_name); //使用预编译语句防止SQL注入
        rs=pstmt.executeQuery();

        //关键判断:如果查询结果集有下一条记录,说明用户名已存在
        if(rs.next()){
            flag=true;
        }
    } catch (SQLException e) {
        e.printStackTrace();
    } finally{
        super.closeAll(conn, pstmt, stmt, rs); //切记关闭数据库连接,释放资源
    }
    return flag;
}

这里的逻辑直截了当:构造SQL查询,使用PreparedStatement安全地传入参数,然后根据查询结果的有无,返回一个布尔值。安全性和资源清理是这一层的生命线。

总结

走完这一遍,整个Ajax验证用户名的流程就非常清晰了:从页面交互触发,到Ja vaScript发起异步请求;请求经Servlet调度,转给Service与Dao层进行数据库查询;最终的查询结果再沿原路返回,由Ja vaScript动态渲染到页面上。这正是一个经典的前后端分离协作的微型模型。希望这个实例的逐层拆解,能帮助你牢牢掌握其中的每一处细节。如果在实践中遇到任何问题,也欢迎随时交流探讨。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
作者最新文章
编程开发
相关文章 更多
IE浏览器怀旧版在线网址
IE浏览器怀旧版在线网址

IE浏览器怀旧版在线网址:一次精准的技术时光回溯 最近,不少老用户和怀旧爱好者在反复搜索一个问题:那个经典的Internet Explorer,如今还能在哪里原汁原味地体验到?答案指向一个特定的地址:https://ie.microsoft.com/legacy/。 这个网站远不止是一个简单的“皮肤

Spring MVC+ajax进行信息验证的方法
Spring MVC+ajax进行信息验证的方法

采用AJAX与SpringMVC的异步验证,通过XMLHttpRequest对象实现局部数据交换,利用@ResponseBody返回JSON或字符串,结合@RequestBody解析请求体,完成表单无刷新校验,包括用户名重复检测与密码一致性验证。该方法提升交互效率,减少带宽占用,有效确保数据准确性,提升用户体验。

PHP - AJAX 与 PHP
PHP - AJAX 与 PHP

AJAX使网页无需整体刷新即可与服务器交换数据并局部更新,实现无刷新体验。通过PHP实例,用户在输入框键入字符时,JavaScript创建XMLHttpRequest对象向PHP文件发送请求,服务器查找匹配姓名并返回结果,实现实时提示。跨域请求需采用JSONP或CORS解决方案。

如何防止 AJAX 请求缓存导致动态内容无法实时更新
如何防止 AJAX 请求缓存导致动态内容无法实时更新

使用jQuery的.load()方法定时刷新页面时,浏览器或服务器缓存可能导致动态内容无法实时更新。通过为每次请求附加毫秒级时间戳参数,可强制URL变化绕过缓存。需注意时间戳参数必须置于片段选择器之前,且服务端响应头不应设置长时间缓存。

如何在不使用表单输入字段的情况下通过 Ajax 将视图数据发送到控制器
如何在不使用表单输入字段的情况下通过 Ajax 将视图数据发送到控制器

本方法采用JavaScript动态读取DOM元素中的文本、图片路径等非表单内容,通过Ajax(如fetch或jQuery)构造键值对对象,以POST请求发送至后端控制器,经校验后存入数据库,实现无需表单控件的数据传递与存储,适用于动态网页数据异步提交。

Ajax Live Edit 返回 500 内部服务器错误的完整排查与修复指南
Ajax Live Edit 返回 500 内部服务器错误的完整排查与修复指南

在Laravel开发中,Ajax实时编辑出现500错误,主要原因包括:PHP数组多维嵌套、CSRF令牌缺失、控制器未返回JSON。修复方法:需要将数组改为一维关联,从meta标签读取令牌,控制器统一使用response()->json()方法返回,并加强输入验证与异常捕获,以彻底解决。

如何正确处理 AJAX 提交后的 PHP 响应页面跳转问题
如何正确处理 AJAX 提交后的 PHP 响应页面跳转问题

AJAX 本身用于异步请求且不刷新页面,若需在提交数据后跳转并显示 PHP 处理结果,不应混合使用 $.ajax 和 window.open,而应改用表单 POST 提交或在 AJAX 成功回调中动态渲染响应内容。 很多开发者都遇到过这个典型的“断层”问题:前端明明通过 AJAX 把数据成功提交给了

springmvc 结合ajax批量新增的实现方法
springmvc 结合ajax批量新增的实现方法

需要注意的问题 在实现SpringMVC结合Ajax进行批量新增功能时,有几个常见的“坑”需要提前留意。这些细节如果处理不当,很容易导致功能无法正常运行。具体来说,主要集中在以下几个方面: MVC框架中,如何正确处理前端传递的日期格式字符串。 当使用@ResponseBody注解返回一个自定义对象时

laravel ajax curd 搜索登录判断功能的实现
laravel ajax curd 搜索登录判断功能的实现

Lara vel CRUD实战:整合Ajax与登录态管理的用户管理系统 在Lara vel项目中构建一个功能完整的后台管理系统,CRUD操作是基础,而结合Ajax实现无刷新交互、并妥善管理用户登录状态,则是提升体验与安全性的关键一步。接下来,我们就通过一个用户管理模块的实战案例,逐一拆解这些功能的实

ajax实现excel报表导出
ajax实现excel报表导出

利用AJAX实现Excel报表导出【解决乱码问题】 在项目开发里,导出Excel报表是个挺常见的需求。但场景一旦复杂起来,常规方法就容易碰壁。比如,接口需要Token认证,直接用A标签就行不通;页面交互复杂,表单提交的方式也不适用。这时候,前端采用AJAX请求、后端返回文件流的方案,就成了一个自然而

查看更多
精品专题 更多
装机必备
装机必备

正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

Windows
Windows

正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

PDF教程
PDF教程

正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

Mac软件 更多
Adobe Acrobat Pro macOS版
Adobe Acrobat Pro macOS版
Mac

Adobe Acrobat Pro 是面向办公、法务、财务、教育及出版用户的专业PDF处理软件,可在Mac上创建、编辑、转换、合并和保护文档,并提供OCR文字识别、表单、批注、内容比较、敏感信息遮盖及电子签名功能。

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

Shapr3D macOS版
Shapr3D macOS版
Mac

Shapr3D是一款面向工业设计、机械工程、建筑概念和三维打印工作流的CAD软件。Mac版采用Parasolid建模内核,支持草图约束、实体建模、工程图、可视化渲染及常见CAD格式交换,并可通过账户在多台设备之间同步项目。

WINDOWS 更多
AutoCAD Windows版
AutoCAD Windows版
Windows

AutoCAD 是 Autodesk 推出的专业计算机辅助设计软件,Windows 版支持精确二维绘图、三维实体与曲面建模、图纸标注、布局发布和任务自动化,并包含多套行业专业化工具组合,适用于建筑、机械、电气、工程建设及制造设计人员。

Adobe Acrobat Pro Windows版
Adobe Acrobat Pro Windows版
Windows

Adobe Acrobat Pro 是面向专业 PDF 工作的综合解决方案,可在 Windows 中创建、编辑、转换、比较、整理和保护文档,并支持表单、电子签名、扫描件文字识别及敏感信息永久遮盖。订阅还包含网页、移动服务和云端协作能力,

Blender
Blender
Windows、macOS 和 Linux

Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。