Ajax_Json

1.Json

JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

语法:

  1. 基本规则
    • 数据在名称/值对中:json数据是由键值对构成的
    • 数据由逗号分隔:多个键值对由逗号分隔
    • 花括号保存对象:使用{}定义json 格式
    • 方括号保存数组:[]

1.1对象与Json字符串相互转换

前端转换

<script type="text/javascript">
        var user = {
            name : "ygp",
            age : 20
        };

        console.log(user);

        //将js对象转换为json字符串
        var s = JSON.stringify(user);
        console.log(s);
        //将json字符串转换为对象
        var parse = JSON.parse(s);
        console.log(parse);
    </script>

后端转换

@RequestMapping("/json1")
    @ResponseBody
    public String json1() throws JsonProcessingException {
        //创建一个映射器,就是一个类,将对象转换为json字符串
        ObjectMapper mapper = new ObjectMapper();
        User user = new User("苑", 18);
        System.out.println(user);
        //将java对象转换为json字符串
        String str = mapper.writeValueAsString(user);
        System.out.println(str);
        return str;//由于使用了ResponseBody注解,这里会将str以json的方式返回
    }

解决乱码

1.RequestMapping注解上解决

/**
     * 发现乱码,需要在RequestMapping注解的produces属性设置:
     *          produces = "application/json;charset=utf-8"
     * @return
     * @throws JsonProcessingException
     */
    @RequestMapping(value = "/json2",produces = "application/json;charset=utf-8")

2.在springmvc.xml中解决

<mvc:default-servlet-handler/>
    <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <constructor-arg value="UTF-8"/>
            </bean>
            <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
                <property name="objectMapper">
                    <bean class="org.springframework.http.converter.json.Jackson2ObjectMapperFactoryBean">
                        <property name="failOnEmptyBeans" value="false"/>
                    </bean>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

注意:第二种方法不能和下面的配置同事使用,否则将会无效

<!--开启springmvc注解支持-->
<mvc:annotation-driven></mvc:annotation-driven>

1.2将系统时间以Json字符串方式返回

编写工具类

public class JsonUtils {
    public static String getJson(Object obj) throws JsonProcessingException {
        return getJson(obj,"yyyy-MM-dd HH:mm:ss");
    }

    public static String getJson(Object obj, String dateFormat) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        //关闭时间戳功能
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);
        //设置格式
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        mapper.setDateFormat(sdf);

        return mapper.writeValueAsString(obj);
    }
}
@RequestMapping("/time3")
    @ResponseBody
    public String json6() throws JsonProcessingException {
        return JsonUtils.getJson(new Date());
    }

2.Ajax

Ajax 即“AsynchronousJavascriptA**nd **XML”(异步 JavaScript 和 XML),是指一种创建交互式、快速动态网页应用的网页开发技术,无需重新加载整个网页的情况下,能够更新部分网页的技术。

通过在后台与服务器进行少量数据交换,Ajax 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。

2.1使用Ajax

1.首先需要导入JQuery的文件

2.然后编写代码

文本框失去焦点后,判断文本框内容是否为admin,如果是弹出true,如果不是弹出false

<script src="${pageContext.request.contextPath}/js/jquery-3.5.1.min.js"></script>

    <script type="text/javascript">
        function f() {
            $.ajax({
                url:"${pageContext.request.contextPath}/ajax/a1",
                data:{'name':$("#value").val()},
                success:function (data,status) {
                    alert(data);
                    alert(status);
                }
                });
        }
    </script>
</head>
<body>
    <div>
        用户名:<input type="text" id="value" onblur="f()">
    </div>
</body>
@RequestMapping("/a1")
    public void ajax1(String name, HttpServletResponse response) throws IOException {
        if ("admin".equals(name)){
            response.getWriter().write("true");
        } else {
            response.getWriter().write("false");
        }
    }

点击按钮获取后台返回集合

<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.5.1.min.js"></script>

    <script>
        $(function () {
            $("#btn").click(function () {
                $.post("${pageContext.request.contextPath}/ajax/a2",function (data) {
                    console.log(data);
                    var html = "";
                    for (var i = 0;i < data.length;i++){
                        html += "<tr>" +
                        "<td>" + data[i].username +"<td>" +
                            "<td>" +data[i].age +"<td>" +
                            "<tr>"
                    }
                    $("#content").html(html);
                })
            })
        })
    </script>
</head>
<body>
    <div>
        <input type="button" id="btn" value="获取数据">
    </div>
    <div>
        <table width="80%" align="center">
            <tr>
                <td>姓名</td>
                <td>年龄</td>
            </tr>

            <tbody id="content">

            </tbody>
        </table>
    </div>
</body>
@RequestMapping("/a2")
    @ResponseBody
    public List<User> ajax2() throws JsonProcessingException {
        List<User> list = new ArrayList<>();
        User user1 = new User("科比", 38);
        User user2 = new User("科比", 38);
        User user3 = new User("科比", 38);
        User user4 = new User("科比", 38);
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);

        return list;//由于加了ResponseBody注解,这里将返回一个字符串
    }

失去焦点判断登录用户名和密码

<head>
    <title>Title</title>
    <script src="${pageContext.request.contextPath}/js/jquery-3.5.1.min.js"></script>
    <script>
        function a1() {
            $.post({
                url:"${pageContext.request.contextPath}/ajax/a3",
                data:{"name":$("#name").val()},
                success:function (data) {
                    if (data.toString()=='ok'){
                        $('#nameInfo').css("color","green");
                    } else {
                        $('#nameInfo').css("color","red");
                    }
                    $('#nameInfo').html(data);
                }
            })
        }

        function a2() {
            $.post({
                url:"${pageContext.request.contextPath}/ajax/a3",
                data:{"pwd":$("#pwd").val()},
                success:function (data) {
                    if (data.toString()=='ok'){
                        $('#pwdInfo').css("color","green");
                    } else {
                        $('#pwdInfo').css("color","red");
                    }
                    $('#pwdInfo').html(data);
                }
            })
        }
    </script>
</head>
<body>
    <div>
        用户名:
        <input type="text" id="name" onblur="a1()">
        <span id="nameInfo"></span>
    </div>
    <div>
        密码:
        <input type="text" id="pwd" onblur="a2()">
        <span id="pwdInfo"></span>
    </div>
</body>
@RequestMapping("/a3")
    @ResponseBody
    public String ajax3(String name,String pwd) throws JsonProcessingException {
        String msg = null;
        if (name!=null){
            if (name.equals("admin")){
                msg = "ok";
            }else {
                msg = "输入的用户名有误";
            }

        }
        if (pwd!=null){
            if (pwd.equals("123456")){
                msg = "ok";
            }else {
                msg = "输入的密码有误";
            }
        }
        return msg;
    }
posted on 2021-03-15 20:13  菜鸟2021  阅读(83)  评论(0)    收藏  举报