AJax入门案例(代码实现)

AJax工作原理

在这里插入图片描述

AJax请求的五个步骤

  1. 创建XMLHttpRequest异步对象
  2. 设置回调函数
  3. 使用open方法与服务器建立连接
  4. 向服务器发送数据
  5. 在回调函数中针对不同的响应状态进行处理

代码实现

功能需求:

根据用户输入的用户名判断该用户名是否存在(已有用户名存储在数据库中)

代码:

jsp页面

<body>
    <form>
        请输入用户名:<input type="text" id="userName">
        <%-- 提示信息--%>
        <span id="tips"></span>
    </form>
</body>

ServletAjax页面

@WebServlet("/ServletAjax")
public class ServletAjax extends HttpServlet {
    // 调用UserInfoservice中方法
    UserInfoService userInfoService = new UserInfoService();

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置编码
        req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");

        // 获取请求参数
        String userName = req.getParameter("userName");
        // 响应回客户端
        PrintWriter out = resp.getWriter();
		// 如果存在
         if (userInfoService.alreadyExist(userName)) {
            out.print("用户名可用!");
        } else {
            out.print("用户名重复!");
        }
    }
}

UserInfoService中alreadyExist()方法

public boolean alreadyExist(String userName) {
        boolean flag = false;
        UserInfo userInfo = userInfoDao.alreadyExist(userName);
        System.out.println(userInfo);
        if (userInfo == null) {
            flag = true;
        }
        return flag;
    }

jsp页面中script脚本

<script>

        //1.创建XMLHttpRequest对象
        var xmlhttp;
        if (window.XMLHttpRequest) {
            //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
            xmlhttp=new XMLHttpRequest();
        }
        else {
            // IE6, IE5 浏览器执行代码
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }

        window.onload = function () {
            // 绑定监听离焦事件
            document.getElementById("userName").addEventListener("blur", function () {
                checkName();
            });
        }
		
        function checkName() {
            var name = document.getElementById("userName").value;
            // 调用open方法,设置请求的参数传给ServletAjax
            xmlhttp.open("POST", "ServletAjax?userName=" + name, true);
            xmlhttp.send();
            xmlhttp.onreadystatechange=function () {
                // 就绪
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    // 获取ServletAjax输出文本
                    var returnString = xmlhttp.responseText;
                    // 写入提示框
                    document.getElementById("tips").innerText = returnString;
                }
            }
        }
</script>

效果展示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

指定回调函数:即设定onreadystatechange属性

​ 当请求被发送到服务器时,我们需要执行一些基于响应的任务。

​ 每当 readyState 改变时,就会触发 onreadystatechange 事件。

​ readyState 属性存有 XMLHttpRequest 的状态信息。

​ 下面是 XMLHttpRequest 对象的三个重要的属性:
在这里插入图片描述

封装增强版

在jsp页面中添加如下代码
<script>
        // 页面加载时,ajax请求servlet获取新闻类别信息
        $(function (){
            // 参数值设置,key, value的形式
            var param = {
                option:"getIt"
            }

            $.ajax({
                // 请求方式get或post
                type:"get",
                // 请求的url地址,对应的ServletNewsType类
                url:"ServletNewsType",
                // 传递的参数
                data:param,
                contentType:"text/html;charset=utf-8",
                // 回调函数三个参数值,mess为响应回来的信息
                success:function(mess, status, xhr) {
                    console.log("执行到newsType.jsp请求ajax");
                    // 接收servlet传回的数据并输出
                    console.log("mess" + mess);
                }
            });
            
            });
    </script>
servlet页面(ServletNewsType类)
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setCharacterEncoding("UTF-8");
        request.setCharacterEncoding("UTF-8");
        // 获取jsp页面ajax传递过来的option的值
        String option = request.getParameter("option");
        if ("getIt".equals(option)) {
        	getIt(request, response);
        }
    }
// getIt()方法
protected void getIt(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String mess = "获取到ServletNewsType中的值了";
        // 设置响应格式
        response.setContentType("application/json;charset=utf-8");
        // 创建Gson对象
        Gson gson = new Gson();
        String gsonMess = gson.toJson(mess);
        // 将mess数据传回jsp页面
        response.getWriter().print(gsonMess);
    }
测试结果

启动tomcat点击页面打开控制台,从ajax响应再到ajax接收
在这里插入图片描述

完~

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ajax经典实例+代码大全 绝对经典 -------- 目录说明 -------- database 目录存放数据库SQL文件 java 目录存放java源文件 webapp 目录存放实例页面及JSP源文件 -------------- 数据库安装说明 -------------- 了解MySQL的用户可以直接使用自己熟悉的方式创建名为ajax的数据库,并将ajax.sql文件导入即可。 下面是简要操作方法: 1. 实例数据库在MySQL 5.0.27 版本下测试通过 2. 将database目录中ajax.sql文件复制到C:\ 3. 进入MySQL安装目录中的bin目录 4. 输入 mysql -u root -p ,然后输入密码登录本地MySQL服务器 5. 输入 CREATE DATABASE ajax DEFAULT CHARACTER SET utf8; 创建名为ajax的数据库 6. 输入 use ajax 7. 输入 source c:\ajax.sql 执行数据库初始化语句 ------------------ Java源文件使用说明 ------------------ 实例中大部分文件为HTML及JSP文件,部分Java源文件存放在java目录中。 可将目录中的内容作为Eclipse的一个项目导入Eclipse中使用。 ----------- WEB发布方法 ----------- 所有实例在jdk 1.4.2 + Tomcat 5.0.28 环境下测试通过。 将webapp目录中的内容复制到Tomcat的webapps目录中作为一个web应用发布即可。 启动Tomcat前注意修改 ajax/WEB-INF/classes/ajax_db.properties 文件。 将其中的URL、USER和PASSWORD属性根据实际情况进行修改。 Tomcat正常启动后使用 http://localhost:8080/ajax 进行访问 +=========================================================================================== 最后注释: 可能还有一点,就是把你的ajax密码定位好 路径是:${ajax}\ajax\WEB-INF\classes\ajax_db.properties,用记事本打开。那个${ajax}就是你当前存放ajax这个文件夹的路 径 DRIVERS=com.mysql.jdbc.Driver URL=jdbc:mysql://localhost/ajax?useUnicode=true&characterEncoding=utf8 USER=root PASSWORD=ajax 里面的代码是这样写的,把最后一行的那个对应的密码改为你自己数据库的代码就OK

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值