欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 焦点 > Ajax--实现检测用户名是否存在功能

Ajax--实现检测用户名是否存在功能

2024/12/21 23:39:10 来源:https://blog.csdn.net/2301_76890677/article/details/144359246  浏览:    关键词:Ajax--实现检测用户名是否存在功能

(一)什么是Ajax

        Ajax(Asynchronous Javascript And XML) 翻译成中文就是“异步JavaScript和XML”,即使用JavaScript与服务器进行异步交互,传输的数据为XML。

        AJAX还可以在浏览器实现局部刷新的效果,即不需要刷新整个页面,就比如之前的案例:验证码,这一特点给用户的感受是在不知不觉中完成请求和响应过程。

特点:

  • 与服务器异步交互
  • 实现浏览器页面局部刷新 

 (二)同步交互与异步交互

  • 同步交互:客户端发出一个请求后,需要等待服务器响应结束后,才能发出第二个请求;

  • 异步交互:客户端发出一个请求后,无需等待服务器响应结束,就可以发出第二个请求。

       通俗来说,同步交互就如同,当你向一个人发消息,你发了一条,必须要等对方回复了才能发下一条,异步交互则不需要等待对方的回复,两人可以同时发送自己想发的信息。

(三)AJAX常见应用情景

当输入用户名后,把光标移动到其他表单项上时,浏览器会使用AJAX技术向服务器发出请求,服务器会查询名为zhangSan的用户是否存在,最终服务器返回true表示名为zhangSan的用户已经存在了,浏览器在得到结果后显示“用户名已被注册!”。

  • 整个过程中页面没有刷新,只是局部刷新了;

  • 在请求发出后,浏览器不用等待服务器响应结果就可以进行其他操作;

 (四)AJAX的优缺点

优点:

  • AJAX使用JavaScript技术向服务器发送异步请求
  • AJAX不需要刷新整个页面
  • 因为服务器不是响应的整个页面,而是局部,所以AJAX能够提高系统的性能

缺点:

  • AJAX并不适用所有场景,有很多情况还是需要用到同步交互
  • AJAX虽然提高了用户的体验,但无形中向服务器发送了太多请求,导致服务器的压力增大
  • 因为AJAX是在浏览器中使用JavaScript技术完成的,所以还需要考虑服务器的兼容性问题

 (五)使用jQuery实现AJAX

        JQuery中已经将AJAX相关的操作进行了封装,使用时只需要在合适的地方调用AJAX相关的方法即可

1.使用JQuery中的ajax方法实现步骤(jQuery是js的一个框架)

  1. 先引入jQuery文件
  2. 调用jQuery中的ajax函数
  3. 编写Servlet方法(接受请求并处理)
  4. 在ajax中接收来自服务端的结果

2.$.ajax()

$.ajax()可以通过发送HTTP请求加载远程数据,是jQuery最底层的AJAX的实现,具有较高灵活性

语法:

$.ajax(

参数1:请求地址url,

参数2:请求类型,

参数3:请求参数,

参数4:请求参数的类型,

参数5:请求成功的回调函数

);

常用设置参数如下:

参 数说 明
String url发送请求的地址,默认为当前页地址
String type请求方式(POST或者GET,默认为GET)
Number timeout设置请求超时时间
Object data 或 String data发送到服务器的数据
String dataType预期服务器返回的数据类型,可用类型有:XML,HTML,Script,JSON,JSONP,Text
function beforeSend(XMLHttpRequest xhr)发送请求前调用的函数参数xhr,可选, XMLHttpRequest对象
function complete(XMLHttpRequest xhr,String ts)请求完成后调用的函数(请求成功或失败时均调用)参数: xhr,可选, XMLHttpRequest对象, ts可选,描述请求类型的字符串
function success(Object result,String ts)请求成功后调用的函数参数result:可选,由服务器返回的数据参数ts可选,描述请求类型的字符串
function error(XMLHttpRequest xhr,String em,Exception e)请求失败时调用的函数参数: xhr,可选, XMLHttpRequest对象, 参数em可选,错误信息参数e:可选 ,捕获的异常对象
boolean global默认为true,表示是否触发全局的AJAX事件

 (六)案例:实现光标移开输入框就判断用户名是否存在的功能

思路:

  1. 绑定事件bluron,实现光标移开聚焦即可检测用户名是否存在
  2. 在jsp中使用ajax函数,湘服务器传递参数
  3. 编写Servlet类,通过response对象得到响应输出流,湘客户端写入用户名是否存在的数据
  4. 编写dao层方法,从数据库中查询该用户名的信息

JSP页面:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>注册页面</title><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>$(function(){$("#uname").blur(function(){var uname = $(this).val();if(uname == ""){$("#remind").html("用户名不能为空");} else {$.ajax({url: "http://localhost:8080/CheckUsername",type: "get",data: "uname=" + uname,dataType: "text",success: function(result) {console.log("Response received: " + result);alert(result);},error: function(xhr, status, error) {console.error("AJAX Error: " + status + error);}});}});});</script>
</head>
<body>
用户名:<input type="text" name="uname" id="uname" /><span id="remind"></span>
</body>
</html>

Servlet方法:

@WebServlet("/CheckUsername")
public class CheckUsernameServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {// 接收前端输入的用户名String uname = req.getParameter("uname");req.setCharacterEncoding("utf-8");resp.setContentType("text/html;charset=utf-8");UserService userService = new UserServiceImpl();if(userService.queryUsername(uname)){resp.getWriter().write("用户名已存在");}else{resp.getWriter().write("用户名不存在");}}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {this.doPost(req, resp);}
}

Dao层方法:

public class UserDaoImpl implements UserDao {@Overridepublic boolean queryUsername(String uname) {Connection conn = null;try {conn= JdbcUtils.getConnection();String sql="select * from users where username = ? ";QueryRunner qr=new QueryRunner();List<User> users = qr.query(conn,sql,new BeanListHandler<User>(User.class),uname);if (users.size()==0){return false;}else {return true;}} catch (SQLException e) {throw new RuntimeException(e);}}
}

运行结果:

用户名不存在:

用户名已存在:

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com