ajax总结

Ajax

介绍

Ajax(Asynchronous javaScript XML)是一种异步处理数据的技术,用于创建快速动态网页,通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新,这意味着可以在不重新加载整个网页的情况下,网页的某部分进行更新。

使用场景

  • 注册时,写完用户名,提示该用户名是否存在,可否注册
  • 更新时,在输入完用户id后,下方的个人信息内容直接自动补全

jquery—ajax语法

get请求方式:

$.get(url,data,function(data){
    
})
发送get请求
参数1: url 是后台服务器地址
参数2: data 是发送到后台服务器的数据,是map格式,
        形如 { name: "John", time: "2pm" }
参数3: function 函数,是回调函数,是请求完成后执行的函数,参数data就是后台返回的数据

post请求:

$.post(url,data,function(data){
    
})
发送post请求
参数1: url 是后台服务器地址
参数2: data 是发送到后台服务器的数据,是map格式,
        形如 { name: "John", time: "2pm" }
参数3: function 函数,是回调函数,是请求完成后执行的函数,参数data就是后台返回的数据

Ajax:

$.ajax()是综合应用,
    	1) 可以随意指定请求方式
        2) 可以指定发送到后台的数据类型
        	一般表单发送的数据,称作表单数据,形如name=admin&pwd=123456
                                 servlet后台使用req.getParameter()接收
            可以指定为json数据,形如{"name":"admin","pwd":"123456"}
                        servlet后台使用字符流读取数据,拼接成json串                   3) 可以指定接收数据的格式
-------------------------------------                        $.ajax()是综合应用,
    	1) 可以随意指定请求方式
        2) 可以指定发送到后台的数据类型
        	一般表单发送的数据,称作表单数据,形如name=admin&pwd=123456
                                 servlet后台使用req.getParameter()接收
            可以指定为json数据,形如{"name":"admin","pwd":"123456"}
                        servlet后台使用字符流读取数据,拼接成json串                   3) 可以指定接收数据的格式
--------------------------------------------------------------------
$.ajax({
    url:"",  // 请求路径
    type:"get|post", // 指定请求方式,不写默认是get
    contenType:"application/x-www-form-urlencoded", // 默认的,发送表单数据
                              // "application/json" , 按json格式发送
    data:"name=admin&pwd=123456", // 发送到后台的数据
           // 如果是指定是json格式,此处应该{"name":"admin","pwd":"123456"}
    success:function(data){  // 请求成功的回调,data就是后台返回的数据
        
    },
    error:function(){  // 请求异常的回调函数
        alter("服务器正忙,稍后再试");
    }
})                     
示例:

前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/jquery-2.1.0.js"></script>
</head>
<body>
<button onclick="showAjaxGet()">$.get</button> <br>
<button onclick="showAjaxPost()">$.post</button> <br>
<button onclick="showAjax()">$.ajax</button> <br>
<script>
    function showAjaxGet() {
       // $.get(url,data,callback)
        $.get("/show/get",{"username":"tom"},function (ret) {
            console.log(ret)
            console.log(ret.code)
            console.log(ret.msg)
        })
    }

    function showAjaxPost() {
        $.post("/show/post",{"password":"123456"},function (ret) {
            console.log(ret)
            console.log(ret.code)
            console.log(ret.msg)
        })
    }

    /**
     * ajax发送get请求时,数据可以是字符串类型,也可以是object(即json类型)
     *  后台servlet都可以使用getParameter来接收
     * ajax发送post请求,且数据类型是json时,且指定数据类型是 contentType:"application/json",,
     *     此时后台无法使用getParameter来接收
     * ajax发送post请求,且数据类型是字符串时,后台可以用getParameter来接收
     */
    function showAjax() {
        $.ajax({
            url:"/show/ajax",
            type:"post",
            contentType:"application/json",
            //data: "username=cat&password=123456",
            data:{"username":"tomcat","password":"666666"},
            success:function (ret){
                console.log(ret)
            },
            error:function (){
                alert("服务器正忙")
            }
        })
    }

</script>
</body>
</html>

后端:

get:

@WebServlet("/show/get")
public class ShowAjaxGetServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username = req.getParameter("username");
        System.out.println("username = " + username);

        // 响应,响应给ajax回调也是json数据
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter( );
        out.write("{\"code\":200,\"msg\":\"请求成功\"}");
    }
}

post:

@WebServlet("/show/post")
public class ShowAjaxPostServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String password = req.getParameter("password");
        System.out.println("password = " + password);


        // 响应,响应给ajax回调也是json数据
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter( );
        out.write("{\"code\":200,\"msg\":\"请求成功\"}");
    }
}

ajax:

@WebServlet("/show/ajax")
public class ShowAjaxServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ShowAjaxServlet-doGet" );
        String username = req.getParameter("username");
        System.out.println("username = " + username);

        String password = req.getParameter("password");
        System.out.println("password = " + password );

        // 响应,响应给ajax回调也是json数据
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter( );
        out.write("{\"code\":200,\"msg\":\"请求成功-ajax\"}");
    }


    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("ShowAjaxServlet-doPost" );

        String username = req.getParameter("username");
        System.out.println("username = " + username);

        String password = req.getParameter("password");
        System.out.println("password = " + password );
        System.out.println(1/0 );
        // 响应,响应给ajax回调也是json数据
        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter( );
        out.write("{\"code\":200,\"msg\":\"请求成功-ajax\"}");
    }
}

案例一:

  • 输入框绑定失去焦点事件
  • 发送ajax请求,携带输入的用户名,到后台
  • 后台servlet接收请求
  • servlet传递数据到service,
  • serice传递数据到dao层
  • dao层根据参数查询数据
  • 将结果返回给service
  • service返回给servlet
  • servlet将接收到service返回数据响应给ajax的回调函数
  • ajax回调接收到返回的数据,判断
  • 是否可以注册,做出样式改变

数据准备:

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `birthday` date DEFAULT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `address` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>

用户名<input id="input-1" type="text" name="username"> <span id="span-1"></span>

<script src="/day42/js/jquery-3.6.0.js" type="text/javascript"></script>
<script type="text/javascript">

    $("#input-1").blur(function (){
        var name = $("#input-1").val();

        // $.get 发送到后台的数据,其实表单数据
       $.get("/day42/check/user",{username:name},function (data){
            // console.log(data);
           // 后台返回的是json数据
           if (data.code == 200) {
               $("#span-1").text(data.msg)
               $("#span-1").css("color","green")
           } else {
               $("#span-1").text(data.msg)
               $("#span-1").css("color","red")
           }
       })
    })


</script>
</body>
</html>

后端:

@WebServlet("/check/user")
public class CheckUserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 接收数据
        String username = req.getParameter("username");
        System.out.println("CheckUserServlet.doGet() username = " + username );

        // 传递数据给service
        UserServiceImpl userService = new UserServiceImpl( );
        User user = userService.findUserByUsename(username);

        System.out.println("CheckUserServlet.doGet() user = " + user );

        // 设置响应的内容类型为json格式,如果不设置的话返回给前端的是JSON字符串
        // 前端需要使用JSON.parse解析为json对象才能使用
        resp.setContentType("application/json;charset=utf-8");
        // 响应json数据,拼接json
        PrintWriter out = resp.getWriter( );
        // 判断
        if (user != null) { // 已存在,不能再注册
            // 响应json数据
            out.write("{\"code\":500,\"msg\":\"已经存在,不能注册\"}");
        } else { // 不存在,可以注册
            out.write("{\"code\":200,\"msg\":\"可以注册\"}");
        }

    }

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

userService&UserServiceImpl

public interface UserService {

    User findUserByUsename(String username);

}

public class UserServiceImpl  implements UserService {
    @Override
    public User findUserByUsename(String username) {
        // 调用dao
        UserDaoImpl userDao = new UserDaoImpl( );
        User user = userDao.findUserByUsername(username);

        return user;
    }
}

UserDao&UserDaoImpl

public interface UserDao {

    User findUserByUsername(String username);

}

public class UserDaoImpl implements UserDao {

    @Override
    public User findUserByUsername(String username) {
        // 加载驱动,获得连接
        Connection conn = DBUtil.getConnection( );
        PreparedStatement ps = null;
        ResultSet rs = null;
        User user = null;
        // 编写sql
        String sql = "select * from user where username = ?";
        try {
            // 预处理
            ps = conn.prepareStatement(sql);

            // 占位符赋值
            ps.setString(1, username);

            // 执行,返回结果集
            rs = ps.executeQuery( );

            if (rs.next( )) {
                user = new User( );
                int id = rs.getInt("id");
                String uname = rs.getString("username");
                String pwd = rs.getString("password");
                String phone = rs.getString("phone");
                String address = rs.getString("address");
                Date birthday = rs.getDate("birthday");

                user.setId(id);
                user.setUsername(uname);
                user.setPassword(pwd);
                user.setAddress(address);
                user.setPhone(phone);
                user.setBirthday(birthday);
            }
        } catch (Exception e) {
            e.printStackTrace( );
        } finally {
            DBUtil.closeAll(rs, ps, conn);
        }

        return user;
    }
}
$.post实现

只需将方法该表为$.post

$.ajax实现

以表单的形式发送数据

前端:

// 发$.ajax请求,发送表单形式发送
$.ajax({
    url:"/day42/check/user",
    type:"get",
    data:"username="+name,  // 表单的形式的是数据
    success:function(data){
        if (data.code == 200) {
            $("#span-1").text(data.msg)
            $("#span-1").css("color", "green")
        } else {
            $("#span-1").text(data.msg)
            $("#span-1").css("color", "red")
        }
    },
    error:function (){
        alert("服务器正忙!")
    }

})

后端:

@WebServlet("/check/user")
public class CheckUserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 接收数据
        String username = req.getParameter("username");
        System.out.println("CheckUserServlet.doGet() username = " + username );


        // 传递数据给service
        UserServiceImpl userService = new UserServiceImpl( );
        User user = userService.findUserByUsename(username);

        System.out.println("CheckUserServlet.doGet() user = " + user );

        // 设置响应的内容类型为json格式
        resp.setContentType("application/json;charset=utf-8");
        // 响应json数据,拼接json
        PrintWriter out = resp.getWriter( );
        // 判断
        if (user != null) { // 已存在,不能再注册
            // 响应json数据
            out.write("{\"code\":500,\"msg\":\"已经存在,不能注册\"}");
        } else { // 不存在,可以注册
            out.write("{\"code\":200,\"msg\":\"可以注册\"}");
        }

    }

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

前端:

        $.ajax({
            url:"/day42/check/user",
            type:"post",// 发送json数据,需要使用post,get形式发送,后台会当做表单数据接收!!
            data: {"username":name},  // json形式的是数据
            contentType:"application/json", // 需要指定发送的数据类型为json,默认是application/x-www-form-urlencoded
            success:function(data){
    // 如果不行的话,查看一下返回的data是否是json字符串?如果是要解析为json对象 

                console.log(" $.ajax.json")
                if (data.code == 200) {
                    $("#span-1").text(data.msg)
                    $("#span-1").css("color", "green")
                } else {
                    $("#span-1").text(data.msg)
                    $("#span-1").css("color", "red")
                }
            },
            error:function (){
                alert("服务器正忙!")
            }

        })

使用$.ajax以get请求发送json数据,后台servlet可以使用req.getParameter(“”)来接收数据

使用$.ajax以post请求发送json数据时,后台servelt不可以使用req.getParameter(“”)来接收数据,应该使用输入流来读取json字符串

后端:

@WebServlet("/check/user")
public class CheckUserServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 接收数据,当发送json数据且以get方法时,用这种方法
        // String username = req.getParameter("username");
        // System.out.println("CheckUserServlet.doGet() username = " + username );

        /**
         * 前端发送的json数据,且是post,就不能使用req.getParameter("username");接数据
         * 可以使用请求对象获得一个输入流,从输入流获得json字符串
         */
        // 获得输入流
        BufferedReader reader = req.getReader( );
        // 准备拼接字符串
        StringBuilder sb = new StringBuilder( );

        String line = null;
        while((line = reader.readLine()) != null) {
            sb.append(line);
        }

        System.out.println("json字符串: " + sb.toString() );
        // 获得拆分后的数组 ["username","admin"]
        String[] split = sb.toString( ).split("=");
        String username = "";
        if (split[0].equals("username")) {
            username = split[1];
        }

        // 传递数据给service
        UserServiceImpl userService = new UserServiceImpl( );
        User user = userService.findUserByUsename(username);

        System.out.println("CheckUserServlet.doGet() user = " + user );

        // 设置响应的内容类型为json格式
        resp.setContentType("application/json;charset=utf-8");
        // 响应json数据,拼接json
        PrintWriter out = resp.getWriter( );
        // 判断
        if (user != null) { // 已存在,不能再注册
            // 响应json数据
            out.write("{\"code\":500,\"msg\":\"已经存在,不能注册\"}");
        } else { // 不存在,可以注册
            out.write("{\"code\":200,\"msg\":\"可以注册\"}");
        }

    }

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

案例二:

需求

需求:

​ 更新时,在输入完用户id后,下方的个人信息内容直接自动补全

技术: html,ajax,servlet,jdbc

具体思路:

  • 创建页面,创建一个表单输入框
  • 给表单绑定失去焦点事件
  • 获得输入框的值,发送ajax请求,发送数据
  • 后台servlet接收
  • 传递到service
  • service传递到dao层
  • dao层查询数据
  • 返回给service
  • service返回给servlet
  • servlet将数据响应给前端
    • 此处需要将全部用户信息拼接成json字符串
  • ajax回调函数,获得数据
  • 获得输入框对象,给赋值

前端:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>编辑</title>
</head>
<body>
<table border="2" align="center">
  <tr>
    <td>编号</td>
    <td>
      <input  id="input-1" type="text" name="id">
    </td>
  </tr>
  <tr>
    <td>用户名</td>
    <td>
      <input type="text" name="username">
    </td>
  </tr>
  <tr>
    <td>密码</td>
    <td>
      <input type="text" name="password">
    </td>
  </tr>
  <tr>
    <td>生日</td>
    <td>
      <input type="date" name="birthday">
    </td>
  </tr>
  <tr>
    <td>手机</td>
    <td>
      <input type="text" name="phone">
    </td>
  </tr>
  <tr>
    <td>地址</td>
    <td>
      <input type="text" name="address">
    </td>
  </tr>
</table>
<script src="js/jquery-3.6.0.js" type="text/javascript"></script>
<script type="text/javascript">
  $("#input-1").blur(function (){
    var id =  $("#input-1").val();
    $.ajax({
      url:"/day42/find/user",
      type:"get",
      data:"id="+id,  // 发送表单数据
      success:function (data){
      // 如果不行的话,查看一下返回的data是否是json字符串?如果是要解析为json对象 
        $("input[name=username]").val("")
        $("input[name=password]").val("")
        $("input[name=birthday]").val("")
        $("input[name=phone]").val("")
        $("input[name=address]").val("")
        if (data.status == 200) {
          var user = data.data;
          $("input[name=username]").val(user.username)
          $("input[name=password]").val(user.password)
          $("input[name=birthday]").val(user.birthday)
          $("input[name=phone]").val(user.phone)
          $("input[name=address]").val(user.address)
        }else{
          alert(data.msg)
        }
      }
    })
  })
</script>
</body>
</html>

后端:

@WebServlet("/find/user")
public class UserFindServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // 接收数据
        String id = req.getParameter("id");
        System.out.println("UserFindServlet.doGet id = " +id );

        // service
        UserFindService userFindService = new UserFindServiceImpl();
        User user = userFindService.findUserById(id);

        resp.setContentType("application/json;charset=utf-8");
        PrintWriter out = resp.getWriter( );
        if (user != null) {
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            String date = sdf.format(user.getBirthday( ));
            out.write("{\"status\":200,\"msg\":\"查询成功\",\"data\":{\"id\":"+user.getId()+",\"username\":\""+user.getUsername()+"\",\"password\":\""+user.getPassword()+"\",\"birthday\":\""+date+"\",\"phone\":\""+user.getPhone()+"\",\"address\":\""+user.getAddress()+"\"}}");
        } else {
            out.write("{\"status\":500,\"msg\":\"查无此人\"}");
        }
    }


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

UserFindService&UserFindServiceImpl

public interface UserFindService {
    User findUserById(String id);
}
public class UserFindServiceImpl implements UserFindService {
    @Override
    public User findUserById(String id) {

        // dao
        UserDaoImpl userDao = new UserDaoImpl( );
        User user = userDao.findUserById(id);
        return user;
    }
}

UserDao&UserDaoImpl

public interface UserDao {

    User findUserByUsername(String username);
    User findUserById(String id);
}

    public User findUserById(String id) {
        // 加载驱动,获得连接
        Connection conn = DBUtil.getConnection( );
        PreparedStatement ps = null;
        ResultSet rs = null;
        User user = null;
        // 编写sql
        String sql = "select * from user where id = ?";
        try {
            // 预处理
            ps = conn.prepareStatement(sql);

            // 占位符赋值
            ps.setInt(1, Integer.parseInt(id));

            // 执行,返回结果集
            rs = ps.executeQuery( );

            if (rs.next( )) {
                user = new User( );
                int uid = rs.getInt("id");
                String uname = rs.getString("username");
                String pwd = rs.getString("password");
                String phone = rs.getString("phone");
                String address = rs.getString("address");
                Date birthday = rs.getDate("birthday");

                user.setId(uid);
                user.setUsername(uname);
                user.setPassword(pwd);
                user.setAddress(address);
                user.setPhone(phone);
                user.setBirthday(birthday);
            }
        } catch (Exception e) {
            e.printStackTrace( );
        } finally {
            DBUtil.closeAll(rs, ps, conn);
        }

        return user;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值