跳到正文
Kale的数字花园
目录 文章
/14 分钟/3 阅读/0 评论

Ajax概述

ASynchronous JavaScript And XML 异步的JavaScript 和 XML 在页面不刷新的情况下和服务器进行交互。获取服务器中的响应的数据。 异步:请求服务器 --- 等待服务器回应,但是在等待过程中后面如果有内

什么是Ajax

ASynchronous JavaScript And XML 异步的JavaScript 和 XML

Ajax 是一种异步刷新技术,用来在当前页面内响应不同的请求内容。
Ajax 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。
Ajax是前端的技术,由浏览器进行解析执行。
 通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的	情况下,对网页的某部分进行更新。
	  传统的网页(不使用 Ajax)如果需要更新内容,必须重载整个网页页面。
	  提升用户的体验
Ajax技术:
	主要是把html、css、js、dom、xml 技术结合在一起使用。
	在页面不整个刷新的情况下,和后台的服务器,以及程序进行数据的传输。

页面不刷新:用户在操作页面的时候,当某个操作结束之后,使用AJAX技术和服务器进行交互,但是用户还可以继续再页面上进行其他的操作。用户并不会感觉到页面在和后台交互。

ajax常见应用:
	地图、注册页面光标离焦之后验证某些数据是否可用等(用户可用,用户存在,都是到后台进行交互)。

ajax的作用

在页面不刷新的情况下和服务器进行交互。获取服务器中的响应的数据。

同步&异步

异步:请求服务器 --- 等待服务器回应,但是在等待过程中后面如果有内容继续操作 -- 处理完毕

同步:请求服务器 --- 等待服务器回应,如果没有回应会一直等待(回应的期间,客户端不能干任何事件)

Ajax快速入门案例

ajax和服务器交互的本质(原理)

原生js方式

获取XMLHttpRequest对象

XMLHttprequest对象是所有浏览器内置的对象。这个对象负责和服务器之间进行数据的交互。我们在JS代码中,先得到XMLhttprequest对象,然后通过这个对象的向服务器发送数据,同时还要使用这个对象接收服务器的响应数据,在获取到响应数据之后,使用JS和 解析技术,把数据添加到当前的页面上。
function createXMLHttp(){
    var xmlhttp;
    /*
        在JS中所有的 非 零  、 非null 、 非undefined 都可以任务是 true
        window.XMLHttpRequest 使用window对象,调用XMLHttpRequest,
            如果当前window对象有XMLHttpRequest,这时就会得到XMLHttpRequest,
            如果当前的window对象没有XMLHttpRequest,这时会得到undefined
    */
    if (window.XMLHttpRequest){//如果能拿到就表示有这样一个对象、如果没有拿到就认为是nudinfed
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else{
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlhttp;
}

建立连接

open方法中的第一个参数:
设置向服务器发送请求时提交数据的方式:get和post

open方法中的第二个参数:
本次请求的服务器的资源路径。

open方法的第三个参数:
true:表示页面的处理和后台发送请求是异步进行。设置true。
false:页面的处理和后台是同步。

xmlhttp.open("请求方式","请求路径",boolean);

发送请求

send是将请求的数据发送给服务器。

send方法中的参数,只有在post请求时才能书写。

如果get方式,直接书写send,括号中不要书写任何内容。

xmlhttp.send();

setRequestHeader方法

如果使用post方式和服务器交互,并且在send中携带参数,需要通过xmlhttprequest中的setRequestHeader设置请求头信息。

//post请求   1:设置请求头   2:在send()方法中书写参数
    xmlhttp.open("POST","ajaxServlet",true);
    //post请求必须在发送服务器前设置请求头
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("username="+value);

代码实现

  • xmlhttp.js
function createXMLHttp(){
    var xmlhttp;
    /*
        在JS中所有的 非 零  、 非null 、 非undefined 都可以任务是 true
        window.XMLHttpRequest 使用window对象,调用XMLHttpRequest,
            如果当前window对象有XMLHttpRequest,这时就会得到XMLHttpRequest,
            如果当前的window对象没有XMLHttpRequest,这时会得到undefined
    */
    if (window.XMLHttpRequest){//如果能拿到就表示有这样一个对象、如果没有拿到就认为是nudinfed
        // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else{
        // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    return xmlhttp;
}
  • 发送请求
function demo() {
    //拿到ajax对象
    var xmlhttp = createXMLHttp();

    //获取用户名的内容
    var value = document.getElementById("username").value;

    //向服务器发送请求
    //get请求传参方式 url?username=jack&password=123&age=89
    xmlhttp.open("GET", "ajaxServlet?username="+value, true);
    xmlhttp.send();

    //post请求   1:设置请求头   2:在send()方法中书写参数
    xmlhttp.open("POST","ajaxServlet",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send("username="+value);

}
  • 页面
<form action="ajaxServlet" method="get">
    用户名:<input type="text" id="username" name="username" onblur="demo();" autocomplete="off">
    <span id="myuserid"></span><br>
    密码:<input type="text" name="password" autocomplete="off"> <br>
    <input type="submit" value="注册">
</form>
  • Servlet
@WebServlet(urlPatterns = "/ajaxServlet")
public class ajaxServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("------post-----");
        //获取ajax传递的参数
        String username = request.getParameter("username");
        System.out.println(username);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("------get-----");
        //获取ajax传递的参数
        String username = request.getParameter("username");
        System.out.println(username);
    }
}
  • 请求测试,查看是否能异步提交到后台
  • 服务器响应
//获取服务器的响应结果
 	xmlhttp.onreadystatechange=function(){
       if (xmlhttp.readyState==4 && xmlhttp.status==200){
          document.getElementById("myuserid").innerHTML=xmlhttp.responseText;//接受服务器响应回来的数据
        }
     }
  • 完整代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>

    <script src="/jQueryDemo/js/xmlhttp.js"></script>

    <script>
        function demo() {
            //后台服务器  ,  get  post
            //拿ajax对象
            var xmlhttp = createXMLHttp();

            //获取用户名的内容
            var value = document.getElementById("username").value;

            //get请求传参方式 url?username=jack&password=123&age=89
            //xmlhttp.open("GET", "ajaxServlet?username="+value, true);
            //xmlhttp.send();

            //post请求   1:设置请求头   2:在send()方法中书写参数
            xmlhttp.open("POST","ajaxServlet",true);
            xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
            xmlhttp.send("username="+value);

            xmlhttp.onreadystatechange=function(){
                if (xmlhttp.readyState==4 && xmlhttp.status==200){
                    document.getElementById("myuserid").innerHTML=xmlhttp.responseText;//接受服务器响应回来的数据
                }
            }

        }
    </script>
</head>
<body>
    <form action="ajaxServlet" method="get">
        用户名:<input type="text" id="username" name="username" onblur="demo();" autocomplete="off">
                <span id="myuserid"></span><br>
        密码:<input type="text" name="password" autocomplete="off"> <br>
            <input type="submit" value="注册">
    </form>
</body>
</html>
  • 完整后台代码
@WebServlet(urlPatterns = "/ajaxServlet")
public class ajaxServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        System.out.println(username);
        if(username.equals("jack")){
            response.getWriter().print("用户名已注册");
            return;
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        System.out.println(username);
        //把username封装并传业务层--dao层
        if(username.equals("jack")){
            response.getWriter().print("用名已存在");
            return;
        }

    }
}

小结

AJAX的编写的步骤:
    * 第一步:创建一个异步对象.
    * 第二步:设置对象状态改变触发一个函数.
    * 第三步:设置向后台提交的路径
    * 第四步:发送请求.

GET方式提交请求:
	function ajax_get() {
        // 1.创建异步对象
        var xhr = createXMLHttp();
        // 2.设置状态改变的监听 回调函数.
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4 && xhr.status == 200){ // 请求发送成功 // 响应也成功
                    // 获得响应的数据:
                    var data = xhr.responseText;
                    // 将数据写入到DIV中:
                    document.getElementById("d1").innerHTML = data;
            }
        }
        // 3.设置请求路径
        xhr.open("GET","/day15/ServletDemo1?name=aaa&pass=123",true);
        // 4.发送请求
        xhr.send();
    }
POST方式提交请求:
	function ajax_post(){
        // 创建异步对象:
        var xhr = createXMLHttp();
        // 设置监听:
        xhr.onreadystatechange = function(){
            if(xhr.readyState == 4 && xhr.status == 200){ // 请求发送成功 // 响应也成功
                    // 获得响应的数据:
                    var data = xhr.responseText;
                    // 将数据写入到DIV中:
                    document.getElementById("d1").innerHTML = data;
            }
        }
        // 打开路径:
        xhr.open("POST","/day15/ServletDemo1",true);			
    	xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
        // 发送请求 post携带参数:
        xhr.send("name=张三&pass=123");
}

jQuery Ajax 编程

第一组:

$ .ajax%20%E6%98%AFjquery%E6%8F%90%E4%BE%9B%E6%9C%80%E5%9F%BA%E6%9C%ACajax%E7%BC%96%E7%A8%8B%E6%96%B9%E6%B3%95%EF%BC%8C%E5%8A%9F%E8%83%BD%E5%BC%BA%E5%A4%A7%EF%BC%8C%E4%BB%A3%E7%A0%81%E5%A4%8D%E6%9D%82%0A%E7%AC%AC%E4%BA%8C%E7%BB%84%EF%BC%9A%E4%B8%BA%E4%BA%86%E7%AE%80%E5%8C%96 $.ajax编程,提供了load、$ .get%E3%80%81 $.post

后台响应json
response.setContentType("application/json;charset=utf-8");

$.ajax()

语法
  • $.ajax({
    键名: 值,
    .....
    键名: 值

});

相关属性
键名 描述
url 请求路径
type 请求方式
data 请求参数{"username":"jack","age":23}
success 响应成功,处理数据。需要定义回调函数
error 响应错误。需要定义回调函数
dataType 设置接受响应数据的格式
<script src="js/jquery-3.4.1.js"></script>
    <script>

      $(function () {
          $("#pnum").blur(function () {
             var $pnum =  $("#pnum").val();

             if( !$pnum.match("^1[35678]\\d{9}$")){
                 //如果不匹配就提示并显示
                 $("#pnumid").html("必须满足手机号11位!");
             }else {

                 $.ajax({
                     type: "post",
                     url: "ajaxServlet",
                     data: {'pnum':$pnum},
                     dataType : "text",
                     success: function(data){
                         //把后台接受的数据写入span中
                         $("#pnumid").html(data);
                     },
                     error: function () {
                         $("#pnumid").html("出错了");
                     }
                 });

             }
          });
      });
 </script>
<form action="userServlet" method="post">
    手机号:<input type="text" id="pnum" name="pnum"><span id="pnumid"></span><br>
    昵称:<input type="text" id="nickname" name="nickname"><br>
    密码:<input type="text" id="pwd" name="pwd"><br>
    <input type="submit"><br>
</form>
@WebServlet(urlPatterns = "/userServlet")
public class userServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置响应的数据格式
        response.setContentType("text/html;charset=utf-8");

        //获取页面提交过来的数据
        String pnum = request.getParameter("pnum");
        System.out.println(pnum);
        //传递 业务层,,,dao
        if("13140009999".equals(pnum)){
            response.getWriter().print("手机号已存在!");
        }else{
            response.getWriter().print("手机号可用!");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

$.load()

Load的语法 : jquery对象.load(url, param ,callback)
url :访问服务器地址
param :发送给服务器参数
callback :当正常返回后 执行回调函数

如果 param存在,以POST方式请求, 如果param 不存在,以GET方式请求

<script src="/jQueryDemo/js/jquery-3.3.1.min.js"></script>
    <script>
      $(function () {
            $("#username").blur(function () {
                var value  = $(this).val();

                //post请求
                var url = 'ajaxloadd';
                var args = {"username": value};
                $("#myuserid").load(url, args);

                //get请求
                var url = 'ajaxloadd?username='+value;
                $("#myuserid").load(url);
            });

      });
    </script>
</head>
<body>
<form action="" method="get">
    用户名:<input type="text" id="username" name="username" autocomplete="off">
    <span id="myuserid"></span><br>
    密码:<input type="text" name="password" autocomplete="off"> <br>
    <input type="submit" value="注册">
</form>
</body>
@WebServlet(urlPatterns = "/ajaxloadd")
public class ajaxloadd extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        System.out.println(username);
        if(username.equals("jack")){
            response.getWriter().print("小可爱已存在哦");
        }
    }

$.get()

语法
  • $.get(url, [data], [callback], [type])
相关属性
键名 描述
url 请求路径
data 请求参数{"username":"jack","age":23}
callback 回调函数
type 响应结果的类型
<script src="/jQueryDemo/js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            $("#username").blur(function(){
                var username = $("#username").val();
                $.get("ajaxgetServlet",{'username':username},function(data){
               //$.get("ajaxgetServlet?username="+username,function(data){
                    $("#myuserid").html(data);
                },"text");
            });
        });
        
    </script>
</head>
<body>
<form action="ajaxgetServlet" method="get">
    用户名:<input type="text" id="username" name="username" autocomplete="off">
    <span id="myuserid"></span><br>
    密码:<input type="text" name="password" autocomplete="off"> <br>
    <input type="submit" value="注册">
</form>
</body>
@WebServlet(urlPatterns = "/ajaxgetServlet")
public class ajaxgetServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        if(username.equals("jack")){
            response.getWriter().print("已存在");
        }
    }
}

$.post()

语法
  • $.post(url, [param], [callback], [type])
相关属性
键名 描述
url 请求路径
param 请求参数{"username":"jack","age":23}
callback 服务器返回客户端执行success函数 ,接收data参数(服务器返回数据)
type 响应结果的类型
<script src="/jQueryDemo/js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
          $("#username").blur(function () {
              var username =  $("#username").val();
              alert(username);
              $.post("ajaxgetServlet",{'username':username},function(result){
                  $("#myuserid").html(result);
              },"text");
          });
        });
    </script>
</head>
<body>
<form action="ajaxgetServlet" method="post">
    用户名:<input type="text" id="username" name="username" autocomplete="off">
    <span id="myuserid"></span><br>
    密码:<input type="text" name="password" autocomplete="off"> <br>
    <input type="submit" value="注册">
</form>
</body>
@WebServlet(urlPatterns = "/ajaxgetServlet")
public class ajaxgetServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
        response.setContentType("text/html;charset=utf-8");
        String username = request.getParameter("username");
        System.out.println(username);
        if(username.equals("jack")){
            response.getWriter().print("已存在");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }
}

serialize方法使用

问题: 如何将form的数据以Ajax方式发送到服务器

通过serialize 方法,将form参数转换 name=value&name=value 格式

<script src="/jQueryDemo/js/jquery-3.3.1.min.js"></script>
    <script>
        $(function () {
            $("#mybtn").click(function () {
                var serialize = $("#myform").serialize();
                $.post("ajaxgetServlet",serialize);
            });
        });
    </script>
</head>
<body>
<form id="myform">
    用户名 <input type="text" name="username" /><br/>
    密码 <input type="password" name="password" /><br/>
    爱好 <input type="checkbox" name="hobby" value="体育" />体育
    <input type="checkbox" name="hobby" value="读书" />读书
    <input type="checkbox" name="hobby" value="音乐" />音乐 <br/>
    <input type="button" value="提交" id="mybtn" />
</form>
@WebServlet(urlPatterns = "/ajaxgetServlet")
public class ajaxgetServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");

        String username = request.getParameter("username");

        String password = request.getParameter("password");

        String[] hobbies = request.getParameterValues("hobby");

        for(String hobby : hobbies){
            System.out.println(hobby);
        }

    }

JSON概述

什么是JSON

JavaScript Object Notation JavaScript对象表示法

  • json现在多用于存储和交换文本信息的语法
  • 进行数据的传输
  • JSON 比 XML 更小、更快,更易解析

JSON基础语法

json数据是由键值对构成的
  • K:V
键用引号(单双都行)引起来
  • "username":"zhangsan"'sex': '男''age':13
值得取值有如下类型
  • 数字(整数或浮点数)字符串(在双引号中)逻辑值(true 或 false)数组对象null
数据由逗号分隔:多个键值对由逗号分隔
  • "username":"zhangsan" , 'age':13
花括号保存对象:使用{}定义json 格式
  • {"username":"zhangsan" , 'age':13}
方括号保存数组:[]
  • ["张三","李四","王五","赵六"]

序列化JSON数据

后台响应
response.setContentType("application/json;charset=utf-8");

  • 使jackson工具序列化json

java对象转换json格式

public class Person {
    private int id;
    private String name;
    private String gender;
    //提供get set方法
}
@WebServlet(urlPatterns = "/JsonServlet")
public class JsonServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Person p = new Person();
        p.setId(12);
        p.setName("jack");
        p.setGender("郑州");

        ObjectMapper objectMapper = new ObjectMapper();

        //writeValueAsString() 将对象转成json字符串
        String json = objectMapper.writeValueAsString(p);
        System.out.println(json);//{"id":12,"name":"jack","gender":"郑州"}

        response.setContentType("application/json;charset=utf-8");
        response.getWriter().print(json);

        //writeValue() 将数据写入p.txt中 {"id":12,"name":"jack","gender":"郑州"}
        objectMapper.writeValue(new File("e://p.txt"),p);

    }

json注解方式

@Setter
@Getter
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    private int id;
    // @JsonProperty("name")
    private String name;
    private String gender;

    //解决password 不显示
    @JsonIgnore//忽略此字段   如果转成json格式,把注解的属性忽略掉(不转成json,不带你玩)
    private String password;

    //日期格式化问题
    @JsonFormat(pattern = "yyyy-MM-dd") ////1564035926050 转后 2019-07-25
    private Date brithdy;

}
@WebServlet(urlPatterns = "/JsonServlet")
public class JsonServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置响应的数据格式  json
        response.setContentType("application/json;charset=utf-8");

        //把对象转成json数据格式
        Person p = new Person();
        p.setId(12);
        p.setName("jack");
        p.setGender("郑州");
        p.setPassword("12345");
        p.setBrithdy(new Date());

        //首先创建转jackson的对象
        ObjectMapper objectMapper = new ObjectMapper();
        //通过jackson对象进行转对象
        String s = objectMapper.writeValueAsString(p);

        //把json串响应到浏览器上
        //{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"} 此时password已经没有了,日期也格式化了
        response.getWriter().print(s);

    }
}

list&map对象转换json

  • list转json
@WebServlet(urlPatterns = "/listServlet")
public class listServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Person p = new Person();
        p.setId(12);
        p.setName("jack");
        p.setGender("郑州");
        p.setPassword("123");
        p.setBrithdy(new Date());

        Person p2 = new Person();
        p2.setId(12);
        p2.setName("jack");
        p2.setGender("郑州");
        p.setPassword("123");
        p2.setBrithdy(new Date());

        Person p3 = new Person();
        p3.setId(12);
        p3.setName("jack");
        p3.setGender("郑州");
        p.setPassword("123");
        p3.setBrithdy(new Date());

        List<Person> list = new ArrayList<>();
        list.add(p);
        list.add(p2);
        list.add(p3);

        //ajax请求后,要把list数据进行 响应
        //设置响应的数据类型 -- json
        response.setContentType("application/json;charset=utf-8");

        //创建jackson对象
        ObjectMapper objectMapper = new ObjectMapper();

        //通过jackson工具类把list集合转成json
        String s = objectMapper.writeValueAsString(list);

        //响应的就是json数据格式
        //[{},{}.{}]
        //[{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"},{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"},{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"}]
        response.getWriter().print(s);

    }
}
  • map转json
@WebServlet(urlPatterns = "/mapServlet")
public class mapServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应数据格式
        response.setContentType("application/json;charset=utf-8");
        //把数据存在map中
        Map<String,Object> map = new HashMap<>();
        map.put("name","张三");
        map.put("age",34);
        map.put("sex","男");

        //创建jackson对象
        ObjectMapper objectMapper = new ObjectMapper();
        //转换对象的方法
        String s = objectMapper.writeValueAsString(map);

        //把转换后的json串响应出去
        //{"sex":"男","name":"张三","age":34}
        response.getWriter().print(s);
    }
}

Json转数据对象

@WebServlet(urlPatterns = "/JsonToperson")
public class JsonToperson extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //定义一个json串
        String json = "{\"id\":12,\"name\":\"jack\",\"gender\":\"郑州\",\"brithdy\":\"2020-05-18\"}";

        //创建jackson对象
        ObjectMapper objectMapper = new ObjectMapper();
        //把json串转成对象
        Person person = objectMapper.readValue(json, Person.class);

        //Person(id=12, name=jack, gender=郑州, password=null, brithdy=Mon May 18 08:00:00 CST 2020)
        System.out.println(person);
    }
}

解析JSON数据

解析单个对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.js"></script>
    <script>
        $.ajax({
            type:"get",
            url:"/personServlet",
            dataType:"json",
            success:function (data) {
//$.each(arr,function(index,item){})
                $(data).each(function (i, person) {
                        $("#list").append(
                            "<tr>"
                                +"<td>"+person.id+"</td>"
                                +"<td>"+person.name+"</td>"
                                +"<td>"+person.password+"</td>"
                                +"<td>"+person.gender+"</td>"
                                +"<td>"+person.brithdy+"</td>" +
                            "</tr>"
                        );
                    }
                );
            },//success of end

            error : function (arg) {
                alert("加载数据失败");
                console.log(arg);
            }

        })//$.ajax({}) of end

    </script>
</head>
<body>

<center>
    <table border="1px" cellpadding="10px" cellspacing="0px" >
        <thead>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>密码</th>
            <th>性别</th>
            <th>生日</th>
        </tr>
        </thead>
        <tbody id="list">

        </tbody>
    </table>
</center>

</body>
</html>
@WebServlet(urlPatterns = "/personServlet")
public class personServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置响应的数据格式  json
        response.setContentType("application/json;charset=utf-8");

        //把对象转成json数据格式
        Person p = new Person();
        p.setId(12);
        p.setName("jack");
        p.setGender("郑州");
        p.setPassword("12345");
        p.setBrithdy(new Date());

        //首先创建转jackson的对象
        ObjectMapper objectMapper = new ObjectMapper();
        //通过jackson对象进行转对象
        String s = objectMapper.writeValueAsString(p);

        //把json串响应到浏览器上
        //{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"} 此时password已经没有了,日期也格式化了
        response.getWriter().print(s);

    }

解析集合

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-3.3.1.js"></script>
    <script>
        $.ajax({
            type:"get",
            url:"/listServlet",
            dataType:"json",//预期后台返回的数据格式为json
            success:function (data) {
               //$.each(arr,function(index,item){})
                $(data).each(function (i,person) { 
                        $("#list").append(
                            "<tr>"
                                +"<td>"+data[i].id+"</td>"
                                +"<td>"+data[i].name+"</td>"
                                +"<td>"+data[i].password+"</td>"
                                +"<td>"+data[i].gender+"</td>"
                                +"<td>"+data[i].brithdy+"</td>" +
                            "</tr>"
                        );
                    }
                );
            },//success of end

            error : function (arg) {
                alert("加载数据失败");
                console.log(arg);
            }

        })//$.ajax({}) of end

    </script>
</head>
<body>

<center>
    <table border="1px" cellpadding="10px" cellspacing="0px" >
        <thead>
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>密码</th>
            <th>性别</th>
            <th>生日</th>
        </tr>
        </thead>
        <tbody id="list">

        </tbody>
    </table>
</center>

</body>
</html>
package cn.yanqi.web;

import cn.yanqi.bean.Person;
import com.fasterxml.jackson.databind.ObjectMapper;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @Auther: yanqi
 * @Date: 
* @Desc:
 */
@WebServlet(urlPatterns = "/listServlet")
public class listServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Person p = new Person();
        p.setId(12);
        p.setName("jack1");
        p.setGender("郑州1");
        p.setPassword("1231");
        p.setBrithdy(new Date());

        Person p2 = new Person();
        p2.setId(13);
        p2.setName("jack2");
        p2.setGender("郑州2");
        p.setPassword("1232");
        p2.setBrithdy(new Date());

        Person p3 = new Person();
        p3.setId(14);
        p3.setName("jack3");
        p3.setGender("郑州3");
        p.setPassword("1233");
        p3.setBrithdy(new Date());

        List<Person> list = new ArrayList<>();
        list.add(p);
        list.add(p2);
        list.add(p3);

        //ajax请求后,要把list数据进行 响应
        //设置响应的数据类型 -- json
        response.setContentType("application/json;charset=utf-8");

        //创建jackson对象
        ObjectMapper objectMapper = new ObjectMapper();

        //通过jackson工具类把list集合转成json
        String s = objectMapper.writeValueAsString(list);

        //响应的就是json数据格式
        //[{},{}.{}]
        //[{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"},{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"},{"id":12,"name":"jack","gender":"郑州","brithdy":"2020-05-18"}]
        response.getWriter().print(s);

    }
}

案例-省市县级联

数据库准备

面页

<script src="js/jquery-3.3.1.js"></script>
    <script>
        $(function () {

            //初始省的参数
            loadArea(0,"s1");

            //当省变化时 加载市
            $("#s1").change(function () {

                //清空市
                $("#s2").empty();
                $("#s2").append("<option value=''>--请选择市--</option>");

                // 清空区县
                $("#s3").empty();
                $("#s3").append("<option value=''>--请选择区县--</option>");

                var code = $(this).val();
                loadArea(code,"s2");

            });

            //当市变化时 加载区县
            $("#s2").change(function () {

                // 清空区县
                $("#s3").empty();
                $("#s3").append("<option value=''>--请选择区县--</option>");

                var code = $(this).val();
                loadArea(code,"s3");

            });

            //首选加载省
            function loadArea(pid,sid) {

                $.post("getCityServlet",{pid:pid},function (data) {

                    $(data).each(function () {

                        var cityName = this.cityName;
                        var codeid = this.codeid;

                       var option =  $("<option value='"+codeid+"'>"+cityName+"</option>");

                       $("#"+sid).append(option);

                    });
                });
            }
        });
    </script>
</head>
<body>

    <select id="s1">
        <option value="">---请选择省---</option>
    </select>
    <select id="s2">
        <option value="">---请选择市---</option>
    </select>
    <select id="s3">
        <option value="">---请选择县---</option>
    </select>

</body>
</html>

Web层

@WebServlet(urlPatterns = "/getCityServlet")
public class getCityServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        //设置响应数据格式
        response.setContentType("application/json;charset=utf-8");

        //获取页面上的提交过来的parentid=0
        String pid = request.getParameter("pid");//0

        int i = Integer.parseInt(pid);

        //调用业务层
        CityService service = new CityServiceImpl();

        //调方法转pid
        List<Province> list = service.queryById(i);

        //创建json对象
        ObjectMapper mapper = new ObjectMapper();

        //响应给前端
        mapper.writeValue(response.getOutputStream(),list);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

service层

public class CityServiceImpl implements CityService {

    //注入
    private CityDao dao = new CityDaoImpl();

    @Override
    public List<Province> queryById(int pid) {
        return this.dao.queryById(pid);
    }
}

dao层

public class CityDaoImpl implements CityDao {

    //注入JdbcTemplate对象
    private JdbcTemplate jdbcTemplate = new JdbcTemplate(JDBCUtils.getDataSource());

    @Override
    public List<Province> queryById(int pid) {
        try {
            String sql = "select * from province where parentid = ?";
            return this.jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(Province.class), pid);
        } catch (DataAccessException e) {
            e.printStackTrace();
            throw  new RuntimeException("查询失败!");
        }
    }
}

接口测试

评论需要登录。生产环境使用 GitHub 登录,本地可前往 登录页 使用开发登录。

还没有评论,来抢沙发。